Linux线程

Linux线程

线程是计算机中独立运行的最小单位,运行时占用很少的系统资源。由于每个线程占用的cpu时间是由系统分配的,因此可以把线程看成操作系统分配cpu时间的基本单位。在用户看来,多个线程是同时执行的,但从操作系统调度上看,各个线程是交替执行的。

这是针对单cpu单核情况,在多cpu多核的主机上,多个线程是可以同时运行的。

线程对进程优点

1.每个进程有自己独立的地址空间,而多线程同一进程内的线程共享进程的地址空间,因此创建进程需要消耗时间为其分配系统资源,节约资源

2.在系统调度方面,线程间的切换速度要远快过进程间的切换速度,节约时间

3.在通讯机制方面,同一进程内的多个线程共享数据空间,一个线程的数据可以直接提供给其它线程使用,而不必经过操作系统。因此线程间的通讯更加方便和省时。

 

一、创建线程

int pthread_create(pthread_t *thread,pthread_attr_t *attr, void* (start_routine)(void *), void *arg);

thread:一个指针,当线程创建成功时,用来返回创建的线程ID

attr:用于指定线程属性,NULL表示使用默认属性。

start_routine:一个函数指针,指向线程创建后要调用的函数。这个被线程调用的函数也称为线程函数。

arg:指向传递给线程函数的参数

返回值:

成功:0

二、线程终止

void pthread_exit(void *retval);

linux提供一对函数,pthread_cleanup_push()pthread_cleanup_pop()用于自动释放资源。

pthread_cleanup_push()的调用点到pthread_cleanup_pop()之间的程序段中的终止动作(如调用pthread_exit)都将执行pthread_cleanup_push()所指定的清理函数。

三、等待

int pthread_join(pthread_t th, void*thread_return);

函数pthread_join用来等待一个线程的结束。pthread_join的调用者将被挂起等待th线程终止,如果pthread_return不为NULL,则*thread_return=returnval

四、代码:创建线程,等待线程结束,输出线程返回值。

#include <pthread.h>

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

void* threadOne(void *arg)

{

       intk = 0;

       while(1)

       {

              printf("threadOneon!\n");

              usleep(200000);

              if(k++== 10)

              {

                     printf("threadexit!\n");

                     pthread_exit((void*)5);                

              }

       }

}

int main(int argc, char **argv)

{

       if(argc != 1)

       {

              printf("Usage:\n");

              printf("<command>\n");

              return1;

       }

       //ŽŽœšÏß³Ì

       pthread_tthreadId;

       if(pthread_create(&threadId,NULL, threadOne, NULL) != 0)

       {

              printf("threadcreate error! \n");

              return1;

       }     

       intthreadReturn;

       pthread_join(threadId,(void *)&threadReturn);

       if((void*)(&threadReturn) != NULL)

       {

              printf("threadOneclosed ok! %d \n", threadReturn);

       }

       return0;

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值