小编sch*_*flo的帖子

在哪些情况下我需要锁定变量来同时访问?

在C或C++程序中,如果2个线程使用相同的全局变量,则需要通过互斥锁来锁定var.

但究竟在哪些情况下呢?

  1. 线程1:读取线程2:读取
  2. 线程1:写线程2:读取
  3. 线程1:写线程2:写

当然你需要锁定案例3,但其他2个案例是什么?案例2(非原子操作)会发生什么?是否存在某种访问冲突或者线程2是否只获得旧值?我对此感到困惑,因为硬件级别的内存和寄存器不能同时访问(在普通的PC硬件中),还是我们有某种并行CPU和并行总线到并行ram芯片?

c c++ multithreading

6
推荐指数
1
解决办法
1960
查看次数

如何阻止和唤醒提升线程?

如何阻止一个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我可以阻塞信号量,但这不是平台独立的.

c++ multithreading boost boost-thread

4
推荐指数
1
解决办法
1234
查看次数

标签 统计

c++ ×2

multithreading ×2

boost ×1

boost-thread ×1

c ×1