使用信号量运行程序

时间:2019-05-25 20:14:37

标签: c operating-system

我有来自geeks4geeks官方网站的程序,该程序在2个线程之间使用信号灯:

// 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 个答案:

答案 0 :(得分:2)

./main.c不应是您运行的命令。

编译后,您应该获得一个可以运行的可执行文件,而不是源文件。

答案 1 :(得分:2)

编译代码后,您应该有一个名为a.out的文件,该文件是可执行文件。使用./a.out运行它。 您可以使用选项-o <name>为可执行文件命名。无论如何,请检查man gcc以获取更多信息。 编译代码的完整命令是

gcc main.c -o main -lpthread -lrt