pthread创建线程及遇到问题解决

出现的错误:invalid conversion from `void*' to `void*(*)(void*)

原来是定义的void reader_function();

pthread_create(&reader,NULL,(void*)&reader_function,NULL);

这样的代码用gcc编译不出问题,用gcc编译有问题。为了两者都没有问题,所以就改为了 void * reader_function();

这样改过之后,又出现了新的问题:invalid conversion from `void*(*)()' to `void*(*)(void*)'

这时又需要改变reader_function函数,给这个函数加上参数变为:void * reader_function(void*);

执行makefile时出现下面错误

undefined reference to `pthread_create'

要增加 -lpthread

gcc pthreadTest.cpp -o pthreadTest -lpthread



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

void* reader_function(void*args);
void writer_function();
pthread_mutex_t mutex;
int main(void) {
    puts("Hello World!!!");
    pthread_t reader;
    pthread_mutex_init(&mutex,NULL);
    pthread_create(&reader,NULL,reader_function,NULL);
//    sleep(1);
    writer_function();
    return EXIT_SUCCESS;
}
void writer_function(){
    sleep(1);
    int i=0;
    while(1){

        printf("this is writer :%d\n",i);
        i++;
    }
}
void* reader_function(void * agrs){
    sleep(1);
    int i=0;
    while(1){

        printf("this is reader reader reader :%d\n",i);
        i++;
    }
    int *a = 0;
    return a;

}




使用互斥锁pthread_mutex_t,实现同一进程中,某些资源的同步。



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

void* reader_function(void*args);
void writer_function();
pthread_mutex_t mutex;
int tickets = 1000;
int main(void) {
    puts("Hello World!!!");
    pthread_t reader;
    pthread_mutex_init(&mutex,NULL);
    pthread_create(&reader,NULL,reader_function,NULL);
//    sleep(1);
    writer_function();
    return EXIT_SUCCESS;
}
void writer_function(){

    while(1){
        pthread_mutex_lock(&mutex);
        if(tickets>0){
            printf("this is writer :%d\n",tickets--);
        }else{
            break;
        }
        pthread_mutex_unlock(&mutex);


    }
}
void* reader_function(void * agrs){
    while(1){
        pthread_mutex_lock(&mutex);
        if(tickets>0){
            printf("this is reader to sell tickets :%d\n",tickets--);
        }else{
            break;
        }
        pthread_mutex_unlock(&mutex);
    }
    int *a = 0;
    return a;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值