探究在C++程序并发时保护共享数据的问题

2020-01-06 13:20:20王旭

易采站长站为您分析探究在C++程序并发时保护共享数据的问题,也有利于大家更好地理解C++多线程的一些机制,需要的朋友可以参考下

我们先通过一个简单的代码来了解该问题。

同步问题

我们使用一个简单的结构体 Counter,该结构体包含一个值以及一个方法用来改变这个值:

 

 
  1. struct Counter {  int value; 
  2.   void increment(){ 
  3. ++value;  } 
  4. }; 

然后启动多个线程来修改结构体的值:

 

 
  1. int main(){  Counter counter; 
  2.   std::vector<std::thread> threads; 
  3. for(int i = 0; i < 5; ++i){  threads.push_back(std::thread([&counter](){ 
  4. for(int i = 0; i < 100; ++i){  counter.increment(); 
  5. }  })); 
  6. }   
  7. for(auto& thread : threads){  thread.join(); 
  8. }   
  9. std::cout << counter.value << std::endl;   
  10. return 0;  }