源码:
#include <stdio.h>
#include <pthread.h>
#include <sched.h>
void *producter_f (void *arg);
void *consumer_f (void *arg);
int buffer_has_item=0;
pthread_mutex_t mutex;
int running =1 ;
int main (void)
{
pthread_t consumer_t;
pthread_t producter_t;
pthread_mutex_init (&mutex,NULL);
pthread_create(&producter_t, NULL,(void*)producter_f, NULL );
pthread_create(&consumer_t, NULL, (void *)consumer_f, NULL);
usleep(1);
running =0;
pthread_join(consumer_t,NULL);
pthread_join(producter_t,NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
void *producter_f (void *arg)
{
while(running)
{
pthread_mutex_lock (&mutex);
buffer_has_item++;
printf("生产,总数量:%d\n",buffer_has_item);
pthread_mutex_unlock(&mutex);
}
}
void *consumer_f(void *arg)
{
while(running)
{
pthread_mutex_lock(&mutex);
buffer_has_item--;
printf("消费,总数量:%d\n",buffer_has_item);
pthread_mutex_unlock(&mutex);
}
}
错误场景:
[root@luozhonghua 04]# gcc -o mutex ex04-5-mutex.c
/tmp/ccZuFiqr.o: In function `main':
ex04-5-mutex.c:(.text+0x3d): undefined reference to `pthread_create'
ex04-5-mutex.c:(.text+0x61): undefined reference to `pthread_create'
ex04-5-mutex.c:(.text+0x8b): undefined reference to `pthread_join'
ex04-5-mutex.c:(.text+0x9f): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
分析:pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a
处理:
在编译中加 -lpthread 参数
[root@luozhonghua 04]# gcc -lpthread -o mutex ex04-5-mutex.c
分享到:
相关推荐
在编程过程中,尤其是在使用多线程技术时,可能会遇到“undefined reference to 'pthread_create'”这样的链接错误。这个错误提示表明,在编译期间,编译器找不到对应的`pthread_create`函数定义,它属于POSIX线程库...
undefined reference to ‘pthread_create’undefined reference to ‘pthread_join’ 问题原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,...
../../lib/libopencv_core.so: undefined reference to `pthread_key_create 解决方法: 修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除 错误二: Linking CXX ...
`pthread_create`是POSIX线程库(pthread)中的核心函数,用于创建新的线程。它允许程序员在一个进程中创建多个执行线程,从而实现并行处理。以下是`pthread_create`函数的详细解析: ```c #include <pthread.h> ...
5. **线程支持**:glibc提供了线程创建、同步和通信的API,如pthread_create、pthread_join、mutex、condition_variable等,使得多线程编程成为可能。 6. **动态链接**:glibc支持动态链接,使得程序可以在运行时...
../../lib/libopencv_core.so: undefined reference to `pthread_key_create' ../../lib/libopencv_core.so: undefined reference to `pthread_getspecific' ... make[2]: *** [bin/opencv_test_calib3d] Error ...
如果在编译过程中遇到“undefined reference to 'pthread_create'”的错误,说明链接器无法找到pthread_create函数的定义。解决这个问题的办法是在编译器选项中加入-lpthread参数,以便链接器链接到pthread库。 ...
例如,如果你正在使用线程编程,并遇到"undefined reference to 'pthread_create'"或"undefined reference to 'pthread_join'"的错误,这通常是因为没有正确链接到`pthread`库。解决方法是在编译命令中添加`-...
3. **错误提示:“undefined reference to symbol 'pthread_create'”**: - 解决方案:在相关Makefile文件中增加`-lpthread`参数。 4. **错误提示:“ImportError: No module named glade”**: - 解决方案:...
`fork()`创建新进程,`pthread_create()`创建线程。 9. **信号处理**: Linux系统使用信号进行进程间通信和异常处理。`<signal.h>`头文件提供了处理信号的函数,如`signal()`。 10. **系统调用**: 通过`syscall...
- **pthread_key_create**:用于线程特定数据。 - **指针数组和数组指针的区别**:指针数组是一组指针,数组指针是指向数组的指针。 - **对结构体某一个成员变量赋初值**:使用指定成员初始化。 - **统计目录下的...
Parameters to C/C++ functions are either input to the function, output from the function, or both. Input parameters are usually values or const references, while output and input/output parameters ...