在C++中,多线程编程是一项常见的任务。当多个线程同时访问和修改共享数据时,可能会出现一些常见的问题,如数据竞争、死锁等。在本文中,我将深入讨论C++线程间共享数据的常见问题,并提供相应的解决方案和示例代码。
数据竞争(Data Race)
数据竞争是指多个线程同时访问和修改共享数据,且至少有一个线程进行了写操作。数据竞争可能导致未定义的行为,如程序崩溃、结果不确定等。
解决方案:
- 使用互斥锁(Mutex):互斥锁是一种同步原语,可以保护共享数据的访问,使得同一时间只有一个线程可以访问共享数据。示例代码如下:
#include
#include
#include
std::mutex mtx;
int sharedData = 0;
void incrementData() {
std::lock_guard lock(mtx);
sharedData++;
}
int main() {
std::thread t1(incrementData);
std::thread t2(incrementData);
t1.join();
t2.join();
std::cout