我正在开发一个使用信号量同时处理相同功能的 c 项目。当我在 linux 上以 root 用户运行它时,它运行良好。但是如果我在另一个用户上运行它,脚本不会被执行,它会在信号量数组中留下一个信号量。有人知道这个问题的解决方案吗?
这是我的代码:
int main(int argC, char* argv[]) {
pthread_t thr[argC-1];
int indexes[argC-1];
int i,j;
for(j=0; j<(argC-1); j++) {
indexes[j] = atoi(argv[j+1]);
pthread_create (&thr[j], NULL, (int *) &stabtest, (void *) &indexes[j]);
}
sem_init(&mutex, 0, 1);
for(j=0; j<(argC-1); j++) pthread_join(thr[j], NULL);
// Destroy semaphore
sem_destroy(&mutex);
// Exit
exit(0);
}
int stabtest(void *ptr) {
sem_wait(&mutex); // down semaphore
// Other code ...
sem_post(&mutex); // up semaphore
pthread_exit(0); // exit thread
}
我实际上在互联网上找到了这段代码,因为我没有使用信号量的经验。所以我不确定这段代码是否适合同时并行运行该函数。但它适用于root用户,所以我猜代码或多或少没问题。
谢谢!