一头雾水,C++有防止线程冲突的硬机制吗?
版主: hci
一头雾水,C++有防止线程冲突的硬机制吗?
因为工作需要,不得不接触点C++
现在发现两个线程间必须要有共享数据,有全局变量,也有对象的attribute
我好像没找到C++硬性防止线程冲突的设计,如果那个全局变量被一个线程读的同时被另一个线程写,会发生冲突崩溃吗?
这个玩意儿在go叫race,不知道C++有没有什么安全的处理办法,除了那堆糟心的* &语法
现在发现两个线程间必须要有共享数据,有全局变量,也有对象的attribute
我好像没找到C++硬性防止线程冲突的设计,如果那个全局变量被一个线程读的同时被另一个线程写,会发生冲突崩溃吗?
这个玩意儿在go叫race,不知道C++有没有什么安全的处理办法,除了那堆糟心的* &语法

Re: 一头雾水,C++有防止线程冲突的硬机制吗?
互斥锁minquan 写了: 2022年 9月 24日 01:03 因为工作需要,不得不接触点C++
现在发现两个线程间必须要有共享数据,有全局变量,也有对象的attribute
我好像没找到C++硬性防止线程冲突的设计,如果那个全局变量被一个线程读的同时被另一个线程写,会发生冲突崩溃吗?
这个玩意儿在go叫race,不知道C++有没有什么安全的处理办法,除了那堆糟心的* &语法
买买提纪检委书记 sex版版主
Re: 一头雾水,C++有防止线程冲突的硬机制吗?
定义一个mutex,然后每次用一个lock_guard保护数据读写。minquan 写了: 2022年 9月 24日 01:03 因为工作需要,不得不接触点C++
现在发现两个线程间必须要有共享数据,有全局变量,也有对象的attribute
我好像没找到C++硬性防止线程冲突的设计,如果那个全局变量被一个线程读的同时被另一个线程写,会发生冲突崩溃吗?
这个玩意儿在go叫race,不知道C++有没有什么安全的处理办法,除了那堆糟心的* &语法
int g_i = 0;
std::mutex g_i_mutex; // 保护 g_i
void safe_write()
{
// 其他任务
// 访问共享变量
{
const std::lock_guard<std::mutex> lock(g_i_mutex);
++g_i;
}
// 其他任务
}
void safe_read()
{
// 其他任务
// 访问共享变量
{
const std::lock_guard<std::mutex> lock(g_i_mutex);
double x = g_i + 5.4;
double y = sin(x)*g_i;
...
}
// 其他任务
}
Re: 一头雾水,C++有防止线程冲突的硬机制吗?
谢谢!bihai 写了: 2022年 9月 24日 01:58 定义一个mutex,然后每次用一个lock_guard保护数据读写。
int g_i = 0;
std::mutex g_i_mutex; // 保护 g_i
void safe_write()
{
// 其他任务
// 访问共享变量
{
const std::lock_guard<std::mutex> lock(g_i_mutex);
++g_i;
}
// 其他任务
}
void safe_read()
{
// 其他任务
// 访问共享变量
{
const std::lock_guard<std::mutex> lock(g_i_mutex);
double x = g_i + 5.4;
double y = sin(x)*g_i;
...
}
// 其他任务
}
看来真得手搓一个。

Re: 一头雾水,C++有防止线程冲突的硬机制吗?
你这个码农当的不合格
连锁是操作系统提供都不知道,怎么可能是编程语言提供锁
如果你不是科班的码农,记住可以找第三方库,提供api调用OS锁的API,或者直接用操作系统锁的API
C++这种底层语言设计,是不可能有锁这种hardware 和OS dependent的东西的,python还差不多
连锁是操作系统提供都不知道,怎么可能是编程语言提供锁
如果你不是科班的码农,记住可以找第三方库,提供api调用OS锁的API,或者直接用操作系统锁的API
C++这种底层语言设计,是不可能有锁这种hardware 和OS dependent的东西的,python还差不多
Re: 一头雾水,C++有防止线程冲突的硬机制吗?
扯淡。你连mutex都不知道omicron 写了: 2022年 9月 24日 08:43 你这个码农当的不合格
连锁是操作系统提供都不知道,怎么可能是编程语言提供锁
如果你不是科班的码农,记住可以找第三方库,提供api调用OS锁的API,或者直接用操作系统锁的API
C++这种底层语言设计,是不可能有锁这种hardware 和OS dependent的东西的,python还差不多
我不用mutex的时候,在go里编写一个线程读全局变量,另一个去改,结果go build race报了一堆错。

Re: 一头雾水,C++有防止线程冲突的硬机制吗?
你是转行大妈吧,连mutex怎么实现都不知道?mutex都是实现在OS内核里的minquan 写了: 2022年 9月 24日 09:16 扯淡。你连mutex都不知道
我不用mutex的时候,在go里编写一个线程读全局变量,另一个去改,结果go build race报了一堆错。
看你们这些转行大妈,连基本概念都不懂,就敢去写多线程程序?
我给你说清楚为啥,免得你不懂装懂,瞎反驳又露怯
多个线程竞争锁,竟争不到的要进入sleep,便于操纵系统调度,这也是为啥锁都实现在内核的原因
你不通过内核只能做spin lock,占用大量CPU,没人在内核外做spin lock
-
- 论坛点评
subsub1 的博客 - 帖子互动: 65
- 帖子: 2850
- 注册时间: 2022年 7月 22日 00:48
Re: 一头雾水,C++有防止线程冲突的硬机制吗?
scheduler最后还是要靠的类似 test and set或者compare and swap这样的instruction level支持omicron 写了: 2022年 9月 24日 08:43 你这个码农当的不合格
连锁是操作系统提供都不知道,怎么可能是编程语言提供锁
如果你不是科班的码农,记住可以找第三方库,提供api调用OS锁的API,或者直接用操作系统锁的API
C++这种底层语言设计,是不可能有锁这种hardware 和OS dependent的东西的,python还差不多
不过你给大妈说多了,要是再提一句lock free和wait free,估计转码大妈就湿了
Re: 一头雾水,C++有防止线程冲突的硬机制吗?
我是转行啊,具体实现机制不了解。不过这种防崩溃的东西应该是语言设计中最重要的吧?omicron 写了: 2022年 9月 24日 11:21 你是转行大妈吧,连mutex怎么实现都不知道?mutex都是实现在OS内核里的
看你们这些转行大妈,连基本概念都不懂,就敢去写多线程程序?
我给你说清楚为啥,免得你不懂装懂,瞎反驳又露怯
多个线程竞争锁,竟争不到的要进入sleep,便于操纵系统调度,这也是为啥锁都实现在内核的原因
你不通过内核只能做spin lock,占用大量CPU,没人在内核外做spin lock
怎么C++搞了一大堆* &指针引用语法,对于这种最关键的东西没有自动保护机制?逼得程序员手动去上锁?
我还以为在之后的高级C++语法,smart pointer自带这种保护锁呢。
咱就说应用,smart pointer是否自带读写互斥锁?还是我得专门一对一的给各个smart pointer建锁?

Re: 一头雾水,C++有防止线程冲突的硬机制吗?
shared_ptr的读写计数是线程安全的。但是其内容需要你自己保护。minquan 写了: 2022年 9月 25日 00:56 我是转行啊,具体实现机制不了解。不过这种防崩溃的东西应该是语言设计中最重要的吧?
怎么C++搞了一大堆* &指针引用语法,对于这种最关键的东西没有自动保护机制?逼得程序员手动去上锁?
我还以为在之后的高级C++语法,smart pointer自带这种保护锁呢。
咱就说应用,smart pointer是否自带读写互斥锁?还是我得专门一对一的给各个smart pointer建锁?