小编Lam*_*ang的帖子

为什么没有lpthread标志的gcc链接?

我正在做一个互动项目,其中互斥体表现得很神秘.我把它归结为这个应该明显陷入僵局的测试用例.

#include <pthread.h>
#include <stdio.h>

int main() {
    pthread_mutex_t test;
    pthread_mutex_init(&test, NULL);
    pthread_mutex_lock(&test);
    pthread_mutex_lock(&test);
    printf("Took lock twice\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在没有-lpthread标志的情况下编译时,程序不仅仍然可以编译和链接,它也可以在没有死锁的情况下运行.为什么?

gcc pthread_break.c -o pthread_test  
./pthread_test
Took lock twice
Run Code Online (Sandbox Code Playgroud)

使用该-lpthread标志进行编译会产生预期结果:

gcc pthread_break.c -o pthread_test -lpthread  
./pthread_test
     <- deadlocked here
Run Code Online (Sandbox Code Playgroud)

我正在运行GCC 7.2.0版.

c multithreading gcc pthreads

5
推荐指数
1
解决办法
603
查看次数

标签 统计

c ×1

gcc ×1

multithreading ×1

pthreads ×1