Запуск программы с семафорами - PullRequest
0 голосов
/ 25 мая 2019

У меня есть эта программа с официального сайта 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)'

Должен ли я запуститьэто с другой командой, или я что-то здесь упускаю? Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 25 мая 2019

После компиляции вашего кода у вас должен быть файл с именем a.out, который является исполняемым файлом. Запустите его с ./a.out. Вы можете дать исполняемому файлу другое имя с параметром -o <name>. В любом случае, проверьте man gcc для получения дополнительной информации. Полная команда для компиляции вашего кода:

gcc main.c -o main -lpthread -lrt
2 голосов
/ 25 мая 2019

./main.c не должна быть командой, которую вы запускаете.

После компиляции вы должны получить исполняемый файл, который вы запускаете, а не исходный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...