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 | |
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 | |
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 : ?你们是这个什么公司?有任何人正经学过计算机吗?
|