0.数据共享的问题
在多个线程中共享数据时。需要注意线程安全问题。如果多个线程同时访问同一个变量。并且其中至少有一个线程对该变量进行了写操作。那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃,产生来定义的结果,或者得到错误的热果。为了避免数据竞争问题。需要使用同步机制来确保多个线程之间对共享数据的访同是安全的。常见的同步机制包括互厍量。条件变量,原子授作等。
1. 预期示例
#include <iostream>
#include <thread>
int a = 3;
void func()
{
std::cout << "begin:" << a << std::endl;
a++;
std::cout << "end:" << a << std::endl;
}
int main()
{
for (int i = 0; i < 10; i++)
{
std::thread th(func);
th.join();
}
getchar();
return 0;
}
2.目标示例
#include <iostream>
#include <thread>
#include <mutex>
int a = 3;
std::mutex mutex;
void func()
{
mutex.lock();
std::cout << "begin:" << a << std::endl;
a++;
std::cout << "end:" << a << std::endl;
mutex.unlock();
}
int main()
{
for (int i = 0; i < 10; i++)
{
std::thread th(func);
th.detach();
}
getchar();
return 0;
}