Linux之线程学习笔记

线程概念:

     在LinuxC中,创建进程fork(),创建线程pthread_creat()。用户在创建进程时,系统要为其分配内存空间(代码段,堆,栈等),创建线程不开辟内存空间,线程是进程中的一条执行路径,线程之间共享进程的内存。

  线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix和类Unix操作系统中线程也被称为轻量级进程(lightweight processes),但轻量级进程更多指的是内核线程(kernel thread),而把用户线程(user thread)称为线程。

线程的API:

创建: int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);

第一个参数:pthread_t 的指针变量,第二个参数:线程类型,默认为NULL,第三个参数:指针函数名,第四个参数:无类型指针函数变量名。

关闭: void pthread_exit(void *retval);// 参数是无类型指针的变量,变量是创建的线程定义的。

阻塞:int pthread_join(pthread_t thread, void **retval);

第一个参数 :pthread_t 的指针变量,第二个参数:无类型二级指针。

 

锁he条件控制//mutex&cond

初始化:pthread_cond_init();//还可以宏定义pthread_cond_t cond = PTHREAD_COND_INITIALIZER

             pthread_mutex_init();//还可以宏定义pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER

销毁:pthread_cond_destroy();  pthread_mutex_destroy();

开解锁:  pthread_mutex_lock(); pthread_mutex_unlock();

触发/等待:  pthread_cond_signal();pthread_cond_wait();

API应用程序:

#include <stdio.h>
#include <pthread.h>
int g_data =0;

pthread_mutex_t mutex;
pthread_cond_t cond;
//pthread_mutex_init(&mutex,NULL);
//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
//                          void *(*start_routine) (void *), void *arg);
void *func1(void *arg)
{
        static char *ret = "99out";
        printf("zi jingchen :%ld\n",(unsigned long)pthread_self());
        printf("t1zifu:%s\n",((char*)arg));
        //pthread_exit((void*)ret);
        while(1){
                pthread_cond_wait(&cond,&mutex);
                printf("t1=%d\n",g_data);
                g_data=0;
                sleep(1);
        }

        pthread_exit((void*)ret);
void *func2(void *arg)
{
        int i;
       // pthread_mutex_lock(&mutex);
        static char *ret = "99out";
        printf("zi jingchen :%ld\n",(unsigned long)pthread_self());
        printf("t1zifu:%s\n",((char*)arg));
//      pthread_exit((void*)ret);
        while(1){
                pthread_mutex_lock(&mutex);
                printf("t2=%d",g_data++);
                if(g_data==5){
                        pthread_cond_signal(&cond);
                }
                pthread_mutex_unlock(&mutex);
           sleep(1);
        }
}
int main()
{

        pthread_mutex_init(&mutex,NULL);
        pthread_cond_init(&cond,NULL);
        int ret;
        char *pret=NULL;
        char* zifu="yichuanshuzi";
        pthread_t t1;
        pthread_t t2;
        ret=pthread_create(&t1,NULL,func1,(void *)zifu);
        pthread_create(&t2,NULL,func2,(void*)zifu);
        if(ret==0){
                printf("create fixiancheng success\n");
        }
        pthread_join(t1,NULL);
        pthread_join(t2,NULL);
        //pthread_join(t2,(void**)&pret);       
        //pthread_join(t1,(void**)&pret);
        printf("main:t1 quit%s\n",pret);
        printf("main:%ld\n",(unsigned long)pthread_self());
        pthread_mutex_destroy(&mutex);
        pthread_cond_destroy(&cond);
        return 0;
}

运行结果:

上面程序为各类API应用。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值