【问题标题】:Arrays of semaphore and mutual assignment in CC中的信号量数组和相互赋值
【发布时间】:2014-12-08 20:43:21
【问题描述】:

我正在尝试在 C 中使用信号量。

我有全局变量:`sem_t array[5];'

以及函数中的本地sem_t MyArray[2];

我初始化我的信号量。

for(i = 0; i < 5; i++)
    sem_init(&array[i], 0, 1);

我想将数组中的 5 个信号量中的 2 个分配给 MyArray。所以MyArrayMyArray+ 1 将是例如array+3array+1,这是相同的地址。

【问题讨论】:

    标签: c arrays pointers semaphore


    【解决方案1】:

    如果不知道sem_t 的内部结构,分配或复制sem_t 对象的语义是不清楚的。

    • 如果sem_t 是一个简单的句柄或指针,那么只需获取一个副本,两个副本都将引用相同的信号量。

    • 如果sem_t 是一个 POD 结构,则可以进行逐字节复制,但该副本将是一个不同独立的信号量。

    • 如果 sem_t 不是 POD 并且包含指针,则 copyinmg 非常重要。

    您可能真正想要的是MyArraysem_t* 的类型引用 array

    // By initialisation
    sem_t* MyArray[2] = { &array[3], &array[1] } ;
    

    // By assignment
    sem_t* MyArray[2] ;
    
    MyArray[0] = &array[3] ;
    MyArray[1] = &array[1] ;
    

    【讨论】:

      【解决方案2】:

      尝试使用指向原件的指针,而不是副本

      sem_t* MyArray[2];
      

      然后分配MyArray[0] = &amp;array[1]; 或任何你想要的

      然后像 sem_wait(MyArray[0]); 一样使用它,这与您原来的 array 不同,后者是 sem_wait(&amp;array[1]);,因为 MyArray 已经是基于指针的。

      【讨论】:

        猜你喜欢
        • 2011-04-20
        • 2015-10-25
        • 2016-11-18
        • 1970-01-01
        • 1970-01-01
        • 2017-08-24
        • 1970-01-01
        • 2016-08-30
        • 1970-01-01
        相关资源
        最近更新 更多