std::互斥量是否足以实现线程间的数据同步?
Is std::mutex sufficient for data synchronization between threads
如果我有一个全局数组,多个线程正在写入和读取它,并且我想确保这个数组在线程之间保持同步,那么使用std::mutex是否足以达到这个目的,如下面的伪代码所示?我偶然发现了这个资源,这让我认为答案是肯定的:
互斥锁(如std::mutex或原子自旋锁)是释放-获取同步的一个例子:当线程A释放锁并由线程B获取时,线程A上下文中的临界区(释放之前)发生的所有事情必须对执行相同临界区的线程B(获取之后)可见。
我仍然对别人的意见感兴趣。
float * globalArray;
std::mutex globalMutex;
void method1()
{
std::lock_guard<std::mutex> lock(globalMutex);
// Perform reads/writes to globalArray
}
void method2()
{
std::lock_guard<std::mutex> lock(globalMutex);
// Perform reads/writes to globalArray
}
main()
{
std::thread t1(method1());
std::thread t2(method2());
std::thread t3(method1());
std::thread t4(method2());
...
std::thread tn(method1());
}
这正是互斥锁的作用。为了尽量减少争用的代价,尽量不要保留它们太久。
相关文章:
- 线程过程中的线程同步问题
- 具有不断变化的资源量的 C++ 多线程同步
- C++服务器上的线程同步
- 由 std::shared_ptr 向量指向的数据之间的线程同步
- STD ::原子与静态变量用于线程同步
- 使用 Visual c++ 进行多线程同步不起作用
- 依靠网络 I/O 在C++中提供跨线程同步
- 与上一个线程具有相同ID的线程同步
- 高精度线程同步
- 将两个线程同步到同一个计时器
- 如何将递归函数的线程与子线程同步
- 线程同步 101.
- qt 中的线程同步
- 线程同步和成员函数
- 布尔变量的线程同步
- 线程同步与boost::condition_variable
- 与线程同步
- 如何跨线程同步变量?C++
- 线程同步:等待两个bool变量
- 多线程同步