我在PPE上进一步测试了这个简单的Pthread代码,以此了解随着线程数量的增加它的性能变化情况。
正如所示,pthread_mutex_init接受一个指针作为参数以初始化为互斥对象,该指针指向一块已分配好的内存区。
换言之,系统为每个pthread分配至少10MB的专用存储。
这听起来有点难以理解,下面的pthread例子会说明条件变量是怎么工作的。
这样,PTHREAD_PROCESS_SHARED和进程间POSIX同步原语可以被实现,而且现在可用。
pthread-qthreaded或_r调用模式创建在多线程环境中运行的程序
在Linux中,pthread_cond_signal会唤醒等待某个条件变更的某个线程。
当pthread_join发生时由内核根据线程ID来完成Futex(fastuserspacemutex)。(要了解futex的更多信息,请参阅参考资料)。
POSIX通过pthread_mutex数据类型提供锁定和同步支持。
在Linux中,pthread_cancel可以终止由具体的threadId所标识的线程的执行。
注意,在释放互斥锁之后调用pthread_cond_broadcast。
如果列表原来是空的,就调用pthread_cond_broadcast以宣告列表中已经添加了数据。
在libspe2中,这个操作变成同步的了,因此您可能会希望在后台运行一个线程,并发出自己的pthread调用。
用于创建pthread_mutex的POSIXAPI使用互斥锁来实现优先级继承协议。
如果您需要在指定的一段时间内阻塞发出调用的线程,那么请使用pthread_cond_timewait来阻塞它。
pthread_mutex可以使用不同的锁定策略创建。
如果超过了最大读锁数量(由实现定义),pthread_rwlock_rdlock可能会失败。
这种仔细的Pthread调度方法使测试运行的结果更加准确,可重复性更高。
前面的表1给出了用于线程间同步的pthread条件变量。
如果系统支持的话,可以使用pthread_mutex_timedlockAPI进一步优化这个场景(见参考资料)。
这个接口并不是提供一个逻辑SPU的抽象,而是面向线程的,它的工作方式与pthread库类似。
或者,当通过pthread_mutex_t变量声明它的时候,可以静态地创建它。
同时,您在创建线程之后的任意时候都可以使用pthread_xxxx。
快速用户空间互斥(也被称为futexes)支持Linuxpthread互斥锁。
在对互斥对象解锁之后,2号线程会立即调用函数pthread_cond_broadcast(&mycond)。
有了这些背景知识,我们来看看pthread_cond_timedwait函数,这个函数用于进行第二个检查。
锁定互斥对象时,线程将调用pthread_cond_wait(&mycond,&mymutex)。
如果有n个并发的读锁,一定要调用pthread_rwlock_unlockn次。