Jas*_*n R 25 multithreading c++11
一位同事最近遇到了一个问题,归结为我们认为具有两个线程的C++应用程序中的以下事件序列:
线程A持有互斥锁.
当线程A持有互斥锁时,线程B会尝试锁定它.由于它被保持,线程B被暂停.
线程A完成它持有互斥锁的工作,从而释放互斥锁.
此后不久,线程A需要触摸受互斥锁保护的资源,因此它会再次锁定它.
似乎线程A再次被赋予互斥锁; 线程B仍在等待,即使它首先"询问"锁定.
这个事件序列是否适合C++ 11 std::mutex和/或pthreads 的语义?老实说我以前从未想过互斥体的这个方面.
Ser*_*eyA 24
已知问题.C++互斥体是操作系统提供的互斥体之上的薄层,而OS提供的互斥体通常不公平.他们不关心FIFO.
同一枚硬币的另一面是线程通常不会被抢占,直到它们的时间片耗尽.因此,此方案中的线程A可能会继续执行,并因此而立即获得互斥锁.