根据C++11标准编写一个代码 生成一个线程执行add函数并加锁
时间: 2024-04-15 20:28:24 浏览: 148
根据C++11标准,可以使用`std::thread`和`std::mutex`来生成一个线程执行`add`函数并加锁。以下是一个示例代码,演示了如何生成一个线程执行`add`函数并使用互斥锁保护共享资源:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 互斥锁,用于保护共享资源
int sharedValue = 0; // 共享资源
void add() {
std::lock_guard<std::mutex> lock(mtx); // 使用std::lock_guard进行自动加锁和解锁
// 在互斥锁的保护下操作共享资源
sharedValue += 1;
std::cout << "Thread " << std::this_thread::get_id() << " added 1. New value: " << sharedValue << std::endl;
}
int main() {
// 创建一个线程执行add函数
std::thread threadObj(add);
// 主线程也执行add函数
add();
// 等待线程完成
threadObj.join();
return 0;
}
```
在这个示例代码中,我们首先定义了一个名为`mtx`的`std::mutex`对象,用于保护共享资源。然后,我们定义了一个名为`sharedValue`的整数变量作为共享资源。在`add`函数中,我们使用`std::lock_guard`来自动加锁和解锁互斥锁。在互斥锁的保护下,我们对共享资源进行操作,并输出结果。
在`main`函数中,我们首先创建一个线程对象`threadObj`,并使用`std::thread`将`add`函数作为线程函数。然后,主线程也执行了一次`add`函数。最后,我们使用`join`方法等待线程对象完成。
需要注意的是,互斥锁的作用是保护共享资源,以确保同一时间只有一个线程可以访问共享资源。这样可以避免数据竞争和不一致的结果。
希望这可以帮助到你!
阅读全文