gpt4 book ai didi

c++ - 使用互斥锁和信号量实现屏障

转载 作者:行者123 更新时间:2023-11-30 17:43:56 38 4
gpt4 key购买 nike

这是一个面试问题:使用互斥体和信号量实现n 个线程之间的屏障。我提出的解决方案:

class Barrier {
public:
Barrier(unsigned int n) : _n(n),_count(0),_s(0) {}
~Barrier() {}
void Wait() {
_m.lock();
_count++;
if (_count == _n) { _s.signal(); }
_m.unlock();
_s.wait();
_s.signal();
}
private:
unigned int _n;
unigned int _count;
Mutex _m;
Semaphore _s;
};

这个解决方案可以吗?仅使用互斥体可以实现 Barrier 吗?

最佳答案

互斥锁正是为了只允许一个线程执行一大块代码并阻止其他线程。我一直使用或制作按构造函数和析构函数的范围锁定/解锁的类。你可以像这样使用它:

void workToDo()
{
CMutex mutex(sharedLockingObject);

// do your code
}

当该方法完成时,互斥体超出范围,并调用析构函数。构造函数执行阻塞锁,并且在获取锁之前不会解除阻塞。这样,您就不必担心异常会导致互斥体锁定,从而在不应该阻止代码时阻止代码。异常自然会解开范围并调用析构函数。

关于c++ - 使用互斥锁和信号量实现屏障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150622/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com