当前位置: 代码迷 >> 综合 >> linux 系统下如何配置多线程 pthread库,基于codeblock IDE
  详细解决方案

linux 系统下如何配置多线程 pthread库,基于codeblock IDE

热度:74   发布时间:2024-01-29 10:04:42.0

由于近期要解决多线程访问同一内存,造成不当竞争的问题,在codeblock上面要实现一个简单的测试程序,使用常见教程为例:

#include <iostream>
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>

using namespace std;

int ticket_sum=20;
pthread_mutex_t mutex_x=PTHREAD_MUTEX_INITIALIZER;//static init mutex

void *sell_ticket(void *arg)
{
for(int i=0; i<20; i++)
{
pthread_mutex_lock(&mutex_x);//atomic opreation through mutex lock
if(ticket_sum>0)
{
sleep(1);
cout<<"sell the "<<20-ticket_sum+1<<"th"<<endl;
ticket_sum--;
}
pthread_mutex_unlock(&mutex_x);
}
return 0;
}

int main()
{
int flag;
pthread_t tids[4];

    for(int i=0; i<4; i++)
{
flag=pthread_create(&tids[i],NULL,&sell_ticket,NULL);
if(flag)
{
cout<<"pthread create error ,flag="<<flag<<endl;
return flag;
}
}

    sleep(20);
void *ans;
for(int i=0; i<4; i++)
{
flag=pthread_join(tids[i],&ans);
if(flag)
{
cout<<"tid="<<tids[i]<<"join erro flag="<<flag<<endl;
return flag;
}
cout<<"ans="<<ans<<endl;
}
return 0;
}

1、 codeblock 报编译错误 ,提示未找到 thread_create 的函数实现,上网查找了一下,原来是由于没有安装 pthread库,现记录一下基于 codeblock的简单配置办法

2、

sudo apt-get install glibc-doc   , 先命令行下载好

3、 find / -name *libpthread.a* 类似命令查看 libthread.a的安装位置,然后我的安装在了  /usr/lib/x86_64-linux-gnu/libpthread.a

4、 codeblock   点击setting-> compiler->linker_setting ,在如下位置add 以上绝对路径 , 不要忘记 other linker option中输入

-lpthread,否则会报 如下错误  

||=== Build: Debug in multithread (compiler: GNU GCC Compiler) ===|
/usr/lib/x86_64-linux-gnu/libpthread.a(pthread_create.o)||In function `allocate_stack':|
/build/glibc-e6zv40/glibc-2.23/nptl/allocatestack.c|475|undefined reference to `_dl_stack_flags'|
/build/glibc-e6zv40/glibc-2.23/nptl/allocatestack.c|613|undefined reference to `_dl_stack_flags'|
/usr/lib/x86_64-linux-gnu/libpthread.a(elision-lock.o)||In function `elision_init':|
/build/glibc-e6zv40/glibc-2.23/nptl/../sysdeps/unix/sysv/linux/x86/elision-conf.c|65|undefined reference to `_dl_x86_cpu_features'|
/usr/lib/x86_64-linux-gnu/libpthread.a(nptl-init.o)||In function `__pthread_initialize_minimal_internal':|
/build/glibc-e6zv40/glibc-2.23/nptl/nptl-init.c|305|undefined reference to `__libc_setup_tls'|
/build/glibc-e6zv40/glibc-2.23/nptl/nptl-init.c|322|undefined reference to `_dl_cpuclock_offset'|
/build/glibc-e6zv40/glibc-2.23/nptl/nptl-init.c|457|undefined reference to `_dl_pagesize'|
/build/glibc-e6zv40/glibc-2.23/nptl/nptl-init.c|466|undefined reference to `_dl_pagesize'|
/build/glibc-e6zv40/glibc-2.23/nptl/nptl-init.c|486|undefined reference to `_dl_init_static_tls'|
/build/glibc-e6zv40/glibc-2.23/nptl/nptl-init.c|488|undefined reference to `_dl_wait_lookup_done'|
/usr/lib/x86_64-linux-gnu/libpthread.a(nptl-init.o)||In function `__pthread_get_minstack':|
/build/glibc-e6zv40/glibc-2.23/nptl/nptl-init.c|509|undefined reference to `_dl_pagesize'|
||error: ld returned 1 exit status|
||=== Build failed: 11 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

5、Done ,希望能帮助到大家