Questions tagged «pthreads»

Pthreads(POSIX线程)是用于创建和操作线程的基于C的标准化API。当前由POSIX.1-2008(IEEE Std 1003.1,2013 Edition / The Open Group Base Specification Issue 7)定义。

3
调用pthread_cond_signal而不锁定互斥锁
我读到某个地方,我们应该在调用pthread_cond_signal之前锁定互斥锁,并在调用它之后解锁mutext: pthread_cond_signal()例程用于发信号(或唤醒)另一个正在等待条件变量的线程。它应该在互斥锁锁定后调用,并且必须解锁互斥锁才能完成pthread_cond_wait()例程。 我的问题是:在不锁定互斥锁的情况下调用pthread_cond_signal或pthread_cond_broadcast方法是否可以?

4
POSIX线程和信号
我一直在尝试理解POSIX线程和POSIX信号如何交互的复杂性。我特别感兴趣: 控制信号传递到哪个线程的最佳方法是什么(假设它首先不会致命)? 告诉另一个线程(实际上可能很忙)信号到达的最佳方法是什么?(我已经知道,使用信号处理程序中的pthread条件变量是一个坏主意。) 如何安全处理将发生信号的信息传递给其他线程?这是否需要在信号处理程序中发生?(我通常不希望杀死其他线程;我需要一种更巧妙的方法。) 作为我为什么要这样做的参考,我正在研究如何将TclX包转换为支持线程,或者将其拆分并至少使一些有用的部件支持线程。信号是那些特别令人感兴趣的部分之一。
81 c  pthreads  signals 

9
C ++中高效的线程安全单例
单例课程的通常模式如下 static Foo &getInst() { static Foo *inst = NULL; if(inst == NULL) inst = new Foo(...); return *inst; } 但是,据我了解,此解决方案不是线程安全的,因为1)Foo的构造函数可能被多次调用(可能无关紧要),并且2)inst在返回到另一个线程之前可能未完全构建。 一种解决方案是在整个方法周围包裹一个互斥体,但是在我真正需要同步后很长一段时间内,我就要为同步开销付出代价。另一种方法是 static Foo &getInst() { static Foo *inst = NULL; if(inst == NULL) { pthread_mutex_lock(&mutex); if(inst == NULL) inst = new Foo(...); pthread_mutex_unlock(&mutex); } return *inst; } 这是正确的方法,还是我应该注意的陷阱?例如,是否可能发生任何静态初始化顺序问题,即inst总是在首次调用getInst时始终保证为NULL?



4
是否可以确定持有互斥锁的线程?
首先,我使用pthread库编写多线程C程序。线程总是被等待的互斥锁挂起。当我使用strace实用程序查找线程处于FUTEX_WAIT状态时,我想知道当时哪个线程持有该互斥量。但是我不知道该怎么做。有没有公​​用事业可以做到这一点? 有人告诉我Java虚拟机支持此功能,因此我想知道Linux是否支持此功能。

4
Pthreads与OpenMP
我正在使用Linux在C中创建一个多线程应用程序。 我不确定应该使用POSIX线程API还是OpenMP API。 使用这两种方法的利弊是什么? 编辑: 有人可以澄清这两个API是创建内核级线程还是用户级线程?
69 c  pthreads  openmp 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.