У меня есть эта программа с официального сайта geeks4geeks, которая использует семафоры между двумя потоками:
// C program to demonstrate working of Semaphores
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
sem_t mutex;
void* thread(void* arg)
{
//wait
sem_wait(&mutex);
printf("\nEntered..\n");
//critical section
sleep(4);
//signal
printf("\nJust Exiting...\n");
sem_post(&mutex);
}
int main()
{
sem_init(&mutex, 0, 1);
pthread_t t1,t2;
pthread_create(&t1,NULL,thread,NULL);
sleep(2);
pthread_create(&t2,NULL,thread,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
sem_destroy(&mutex);
return 0;
}
В соответствии с этим запущенным сайтом будет напечатан этот результат:
Entered..
Just Exiting...
Entered..
Just Exiting...
В моемкомпьютер в Ubuntu Linux Я скомпилирую его, используя gcc main.c -lpthread -lrt, и он успешно компилируется, но после этого при попытке запустить его с ./main.c выдает следующую ошибку:
./main.c: line 8: sem_t: command not found
./main.c: line 10: syntax error near unexpected token `('
./main.c: line 10: `void* thread(void* arg)'
Должен ли я запуститьэто с другой командой, или я что-то здесь упускаю? Пожалуйста, помогите.