我有来自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)'
我应该使用其他命令来运行它,还是在这里缺少其他内容?请帮忙。
答案 0 :(得分:2)
./main.c
不应是您运行的命令。
编译后,您应该获得一个可以运行的可执行文件,而不是源文件。
答案 1 :(得分:2)
编译代码后,您应该有一个名为a.out
的文件,该文件是可执行文件。使用./a.out
运行它。
您可以使用选项-o <name>
为可执行文件命名。无论如何,请检查man gcc
以获取更多信息。
编译代码的完整命令是
gcc main.c -o main -lpthread -lrt