linux 多线程

一、多线程工作机理

进程里创建一个子线程时,实际上会复制自身的一个进程,在这个进程里去运行该子线程。这个进程复制原有的变量和环境等,跟fork创建子进程不同。主要过程是主线程创建子线程,(子线程工作),主线程等待子线程结束。

二、线程创建

创建线程时,第一个参数给子线程一个ID,用于标识线程。第三个给线程指定运行函数的指针,第四个指定函数输入的参数值。第二个参数还可以设置线程属性。

pthread_create(pthread_t*  id,const pthread_attr_t* attr,(void*)(*start_rtn)(void*),void *arg)

三、等待结束线程

pthread_join(pthread_t id,void** retval)

主线程阻塞等待该id标识的子线程,第二个参数可以存储子线程返回值。该函数一个作用可以防止子线程未运行完主线程就退出了,另一个作用是释放子线程运行时复制的进程的资源。

四、demo

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

void pthread0();
void pthread1(int a);
void pthread0()
{
        int count=3;
        while(count>0){
                printf("pthread0\n");
                sleep(2);
                count--;
        }
}
void pthread1(int a)
{
        int b;
        b=a;
        while(b>0){
                printf("pthread1,time left=%d\n",b);
                sleep(2);
                b--;
        }
}
int main()
{
        pthread_t id0;
        pthread_t id1;
        int i=2;
        pthread_create(&id0,NULL,(void *)pthread0,NULL);
        pthread_create(&id1,NULL,(void *)pthread1,i);

        pthread_join(id0,NULL);
        pthread_join(id1,NULL);
        return 0;
}

五、编译命令链接

gcc -o thread thread.c -lpthread

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值