使用互斥锁和信号量实现屏障
Barrier implementation using mutex & semaphore
这是一个面试问题:使用互斥和信号量实现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
}
当该方法完成时,互斥锁将超出作用域,并调用析构函数。构造函数执行阻塞锁,并且在获取锁之前不会解除阻塞。这样,您就不必担心异常会给您留下锁定的互斥对象,这些互斥对象会在不应该阻止代码的时候阻止代码。异常将自然地解开作用域并调用析构函数。
相关文章:
- 删除旧的信号量系统V
- 父进程和子进程之间的 POSIX 信号量
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- 多线程.如果我使用信号量,我可以在开始时创建很多线程还是应该只有几个线程?
- C/C++ - 用于按顺序打印数字的 sem_t 类型的单个信号量
- 单车道桥 使用信号量进行同步
- 用于 64 位/32 位 IPC 的 POSIX 信号量的替代方案?
- 这个餐饮哲学家问题(dpp)的解决方案是如何工作的?互斥体和信号量
- 发布信号量返回错误 6(无效句柄)
- 在 C Linux 中使用三个线程使用信号量同步按顺序打印 3 4 5 50 次
- 在使用 pthread 和信号量实现生产者-消费者问题时需要帮助
- 实现信号量
- 实现信号量时混淆了核心转储
- 使用互斥锁和信号量实现屏障
- 如何在多核系统上实现信号量
- 用C++实现一个二进制信号量类
- 使用x86程序集的信号量实现
- C ++自己实现信号量
- 我能否仅使用事件、互斥体和信号量实现公平"wait on multiple events"?
- 信号量实现