由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++现在如何从一个线程通知另一个?bool是否不行?
进入Programming版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
最近组里年轻人写了一个文档,我一看,有问题啊,是这样的
Thread redo;
bool done;
redo.......*([&done](){
if ...
done = true;
});
while(!done){
sleep(1s);
}
我感觉是不是不能简单地用bool传递线程结束了的事情?我知道古时候我们可以用
volatile做这么简单的事情,但是C++20要取消volatile了。
至少得atomic吧?要不然无法保证编译器不优化吧?
f*******t
发帖数: 7549
2
用atomic是比较好。
blocking的sleep看着难受。
m*****n
发帖数: 3575
3
这时候就要吹一波go的channel了
A***g
发帖数: 1816
4
这种30年前的写法还弄出来,说明年轻人单靠刷题不行啊。
你应该告诉他去看,std::thread
h****e
发帖数: 2125
5
从你老哥的历史发文来看,你们公司的人无论senior与否,好像都不怎么懂
multithreading啊

【在 b***i 的大作中提到】
: 最近组里年轻人写了一个文档,我一看,有问题啊,是这样的
: Thread redo;
: bool done;
: redo.......*([&done](){
: if ...
: done = true;
: });
: while(!done){
: sleep(1s);
: }

b****u
发帖数: 1130
6
他们公司很好很强大啊。
文档写得简单易懂,除了没有运行过这个代码,没毛病。

【在 h****e 的大作中提到】
: 从你老哥的历史发文来看,你们公司的人无论senior与否,好像都不怎么懂
: multithreading啊

m*t
发帖数: 7490
7
用volatile,sleep放在线程中,不block主进程,应该可以吧
tc
发帖数: 21
8
能用C++11的话,std::condition_variable
https://en.cppreference.com/w/cpp/thread/condition_variable/wait
b***i
发帖数: 3043
9
这个年轻人写的是一个设计文档,拿来让我们看看哪个方法好。我评论的这个是我不推
荐的。还有另外一个更安全。
就这个方案而言,年轻人的原设计还考虑了一个超时机制,就是5分钟后如果没有响应
就退出while循环。我把这个简化掉了。不知道如果需要这个,那么conditional
variable还能用在这里吗?

【在 tc 的大作中提到】
: 能用C++11的话,std::condition_variable
: https://en.cppreference.com/w/cpp/thread/condition_variable/wait

tc
发帖数: 21
10
也能用
https://en.cppreference.com/w/cpp/thread/condition_variable/wait_for
wait_for(lock, some_duration);

【在 b***i 的大作中提到】
: 这个年轻人写的是一个设计文档,拿来让我们看看哪个方法好。我评论的这个是我不推
: 荐的。还有另外一个更安全。
: 就这个方案而言,年轻人的原设计还考虑了一个超时机制,就是5分钟后如果没有响应
: 就退出while循环。我把这个简化掉了。不知道如果需要这个,那么conditional
: variable还能用在这里吗?

y********4
发帖数: 1116
11
你们公司没人知道semaphore吗?没人知道atomic Boolean?没人知道memory barrier
?你们是这个什么公司?有任何人正经学过计算机吗?
b***i
发帖数: 3043
12
代码库倒是有,还有一个类,就包了一个std::atomic_bool,不知道为啥这样做。
肯定有人懂的,但是他们说,多线程太难,最好不要用。

barrier

【在 y********4 的大作中提到】
: 你们公司没人知道semaphore吗?没人知道atomic Boolean?没人知道memory barrier
: ?你们是这个什么公司?有任何人正经学过计算机吗?

1 (共1页)
进入Programming版参与讨论