#include <thread>
#include <iostream>
#include <future>
using namespace std;
thread_local int n = 0; // 线程局部存储变量
using atomic_int = std::atomic<int>; // 原子化的bool
atomic_int x {0}; // 初始化,不能用=
int y = 1;
mutex mtx;
void show(const char str[], const int id) {
mtx.lock();
y = id * 10;
mtx.unlock();
time_t current_time;
current_time = time(NULL);
x+=id;// 线程共享的自增变量
n += id; // 使用线程局部变量,互不影响
std::unique_lock<std::mutex> ulck(mtx);//cout也需要锁去保护, 否则输出乱序
cout << "线程" << id + 1 << ":" << str << ":" << current_time << ":" << n << ":" << x << ":" << y << endl;
}
void async_test(){
auto task = [](auto x) // 在线程里运行的lambda表达式
{
this_thread::sleep_for( x * 1ms); // 线程睡眠
cout << "sleep for " << x << endl;
return x;
};
auto f = std::async(task, 10); // 启动一个异步任务 需要引入future库
f.wait(); // 等待任务完成
assert(f.valid()); // 确实已经完成了任务
cout << f.get() << endl; // 获取任务的执行结果
}
int main() {
thread t1(show, "hello cpp1:", 0);
thread t2(show, "hello cpp2:", 1);
thread t(show, "hello cpp3:", 100);
thread t_move = move(t);// 未启动前move有效
t1.join();// 会合
t2.join();// 会合
t_move.join();
}
c++多线程及线程安全
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...