【问题标题】:How to replace sem_init() with sem_open() for non pointer semaphore?对于非指针信号量,如何用 sem_open() 替换 sem_init()?
【发布时间】:2013-11-07 13:37:44
【问题描述】:

我目前遇到了一个问题。

以下是原代码

sem_t s;
sem_init(&s, 0, 1);

而且我需要将 sem_init 替换为 sem_open 因为它将在 iOS 上使用

sem_t s;
sem_open("/s", O_CREAT, 0644, 1); //which will return sem_t*

我应该如何将返回地址分配给s? 谢谢

附言我没有声明 sem_t* s,因为这是一个巨大的库,我不会对其进行太多更改

【问题讨论】:

  • 地址不是只能存储到指针中吗?

标签: ios c semaphore


【解决方案1】:

创建一个新的信号量指针,

 sem_t *sptr;

调用sem_open,因为sptr 持有地址,

 sptr = sem_open("/s", O_CREAT, 0644, 1);

下面的预处理器宏应该可以解决问题,

 #define s *sptr

使用上述方法,当s 作为参数传递时,例如sem_wait(&s) 沸腾为sem_wait(&*sptr) => sem_wait(sptr),这是在不更改sem_t s 的情况下需要的。

【讨论】:

  • 谢谢,但在某些代码中它被用作实例成员,如“sem_wait(&(myInstance->s))”,并且实例名称可能不同如何定义宏?跨度>
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多