线程同步的问题

问题场景:

在实现一个简单的线程池的过程中,

每一个线程都可以访问一个ThreadPool的对象,在每一个线程中都尝试不断的调用GetJob(){...}

在调试的过程中发现,虽然给GetJob中的关键部位加了线程同步的代码,可是被同步的部位中,仍然产生了重复获取任务的现象!

最后在尝试锁定问题的过程中发现,所有演示EnterCriticalSection(); 的代码中需要同步的关键数据都需要是静态的!

这时才提醒我,原来在每一个线程中,都拷贝了一份jobList,虽然在同步的部位jobList.pop_front(); 之后,容器中的对象应该减少,但是只是改变了当前线程中的jobList,所以当切换到另外一个线程中的时候,jobList中的对象数量还是原来的数量!!!

 

疑惑:

即使在代码中,我们只产生了一个ThreadPool对象,然后通过指针将这个对象传给线程回调函数的时候,这个对象是唯一的。但是

但是通过调用ThreadPool中GetJob(){} 来对ThreadPool对象中的变量进行改变的时候,都会造成很多份不同的数据的同时存在!!!

 

在使用多线程进行同步的时候,需要确保所有的线程所同步的变量是static的或者全局唯一的!

 

理解如果有误,敬请指教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章