c++多线程操作同一个数自增
时间: 2023-07-24 08:27:58 浏览: 65
在C++中,多线程操作同一个数自增需要使用同步机制来避免竞争条件。常见的同步机制有互斥锁和原子操作。
使用互斥锁可以确保同一时间只有一个线程能够访问共享资源。在C++11之后,可以使用std::mutex类实现互斥锁。代码示例:
```c++
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int counter = 0;
void increment() {
for (int i = 0; i < 1000000; ++i) {
mtx.lock();
++counter;
mtx.unlock();
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << counter << std::endl;
return 0;
}
```
使用原子操作可以保证在多线程环境下对共享变量的操作是原子的,即不会被中断。在C++11之后,可以使用std::atomic类实现原子操作。代码示例:
```c++
#include <iostream>
#include <thread>
#include <atomic>
std::atomic<int> counter(0);
void increment() {
for (int i = 0; i < 1000000; ++i) {
++counter;
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << counter << std::endl;
return 0;
}
```
无论使用互斥锁还是原子操作,都能够保证多线程操作同一个数自增的正确性。