在C或C++程序中,如果2个线程使用相同的全局变量,则需要通过互斥锁来锁定var.
但究竟在哪些情况下呢?
当然你需要锁定案例3,但其他2个案例是什么?案例2(非原子操作)会发生什么?是否存在某种访问冲突或者线程2是否只获得旧值?我对此感到困惑,因为硬件级别的内存和寄存器不能同时访问(在普通的PC硬件中),还是我们有某种并行CPU和并行总线到并行ram芯片?
如何阻止一个boost线程并将其从另一个线程中唤醒?线程正在做一些工作,如果工作完成它应该阻塞或睡眠,如果新工作准备好主线程应该弱工作线程.我尝试使用boost ipc message_queue上的阻塞读取,但它不是一个高性能的解决方案.
像这样的东西:
void thread()
{
uint8_t ret=0;
for(;;) //working loop
{
ret=doWork();
if(ret==WORK_COMPLETE)
{
BlockOrSleep();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用pthreads我可以阻塞信号量,但这不是平台独立的.