首页 > 解决方案 > 将`std::condition_variable`放入未实例化的结构中?

问题描述

定义了一个用于 IPC 的结构:

struct shmbuf {
  mutable std::mutex mtx;
  std::condition_variable cv;
  bool inited;
};
struct shmbuf* mySHMBuf;

如您所见,我只有一个指向它的指针,并且该指针的分配如下:

mySHMBuf = mmap(NULL, sizeof(struct shmbuf), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);

但在这种情况下,似乎std::condition_variable根本不起作用(它卡在里面wait并且永远不会醒来,以防其他人打电话mySHMBuf->cv.notify_all())。

我猜在这种情况下,条件变量根本没有正确初始化,但由于它没有复制构造函数,我不能给它分配任何其他东西。

我可以以某种方式解决这个问题,或者我的选择是什么?不要在这些情况下使用它?用它作为指针(不好的感觉)?

如果需要更多详细信息,我的初始示例来自这里:https ://man7.org/linux/man-pages/man3/shm_open.3.html

它是纯 C,不使用任何 C++ 特性。

我应该像示例中那样坚持使用旧的 C 风格信号量吗?

标签: c++mmap

解决方案


推荐阅读