C中的信号量数组和相互赋值
Posted
技术标签:
【中文标题】C中的信号量数组和相互赋值【英文标题】:Arrays of semaphore and mutual assignment in C 【发布时间】: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。所以MyArray
和MyArray+ 1
将是例如array+3
和array+1
,这是相同的地址。
【问题讨论】:
【参考方案1】:如果不知道sem_t
的内部结构,分配或复制sem_t
对象的语义是不清楚的。
如果sem_t
是一个简单的句柄或指针,那么只需获取一个副本,两个副本都将引用相同的信号量。
如果sem_t
是一个 POD 结构,则可以进行逐字节复制,但该副本将是一个不同且独立的信号量。
如果 sem_t
不是 POD 并且包含指针,则 copyinmg 非常重要。
您可能真正想要的是MyArray
以sem_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] = &array[1];
或任何你想要的
然后像 sem_wait(MyArray[0]);
一样使用它,这与您原来的 array
不同,后者是 sem_wait(&array[1]);
,因为 MyArray 已经是基于指针的。
【讨论】:
以上是关于C中的信号量数组和相互赋值的主要内容,如果未能解决你的问题,请参考以下文章