linux的pthread_self与gettid的返回值和开销的区别

pthread_self()是POSIX的实现,它的返回值是pthread_t,pthread_t在linux中实际是无符号长整型,即unsigned long。

gettid是系统调用,它的返回值是pid_t,在linux上是一个无符号整型。

测试机为Intel i7 860 2.8GHz,八核,各调用一千万次,二者效率基本一致,测试代码如下:

#include<stdio.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <pthread.h>
pid_t gettid(void){
        return syscall(SYS_gettid);
}
int main()
{
        int i=0;
        printf("%u %lu",gettid(),pthread_self());
        for(i=0;i<10000000;i++)
        {
                gettid();
        //      pthread_self();
        }
}

 gettid()测试结果

[root@test]# time ./a.out 

real	0m0.572s
user	0m0.230s
sys	0m0.342s
pthread_self()测试结果

[root@test]# time ./a.out 

real	0m0.570s
user	0m0.250s
sys	0m0.321s

### 回答1: pthread_cond_broadcast 函数返回值为0,表示成功。这个函数用于向等待在条件变量上的所有线程发送信号,使它们都能够从等待状态中恢复执行。如果函数执行失败,它将返回一个非0值,表示发生了错误。在使用 pthread_cond_broadcast 函数时,我们需要确保已经对相关的条件变量和互斥量进行了正确的初始化和设置。 ### 回答2: pthread_cond_broadcast函数在成功时返回0,失败时返回一个正整数错误代码。这个函数的主要目的是广播一个条件变量,即通知正在等待该条件变量的所有线程。 返回值为0表示函数成功执行,条件变量被成功广播。这意味着所有等待该条件变量的线程都会被唤醒,并且可以继续执行。 返回其他正整数错误代码表示函数执行失败。可能的错误代码包括: - EINVAL:传入的条件变量无效。条件变量未被正确初始化或已被销毁。 - EAGAIN:资源不足,无法完成广播操作。 在实践中,pthread_cond_broadcast函数返回值通常用于判断函数执行是否成功。如果返回值为0,则说明广播成功,所有等待线程都将被唤醒。而如果返回值为其他错误代码,则可以根据具体错误代码进行错误处理。 ### 回答3: pthread_cond_broadcast函数没有返回值,它的作用是用于向所有等待该条件变量的线程发送信号。当调用pthread_cond_broadcast函数时,所有正在等待该条件变量的线程将会被唤醒,然后竞争获取该条件变量的锁。 pthread_cond_broadcast函数是线程间同步的重要手段之一,它用于实现生产者-消费者模型或者多线程协作的场景。通过该函数,生产者线程可以通知所有的消费者线程有新的数据产生,从而唤醒所有处于等待状态的消费者线程来处理数据。在多线程环境中,调用pthread_cond_broadcast函数后,被唤醒的线程将会重新竞争获取锁,然后根据程序设计来确定执行的具体逻辑。 需要注意的是,pthread_cond_broadcast函数只能用于与互斥锁(pthread_mutex)一起使用。在调用该函数前,必须先对条件变量和互斥锁进行初始化,并将互斥锁锁住,然后才能调用pthread_cond_broadcast函数。该函数执行后,互斥锁仍然被锁住,因此在使用完条件变量后,需要解锁互斥锁以释放资源。 总之,pthread_cond_broadcast函数没有返回值,它用于向所有等待该条件变量的线程发送信号并唤醒它们,使得被唤醒的线程可以继续执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值