Я работаю 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, поэтому я думаю, что код более или менее ок.
Спасибо!