Linux下线程实现

1.线程概述

进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。
线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径,他们共享一个进程的资源。
因为线程和进程比起来很小,所以相对来说,线程花费更少的CPU资源。

2.线程创建和退出

在linux中,一般采用Pthread线程库实现线程的访问与控制,由POSIX提出,具有良好的可移植性。

创建线程使用pthread_create函数。在线程创建以后,就开始运行相关的线程函数。线程退出时使用函数pthread_exit,是线程的主动行为。注意进程退出时使用exit函数,线程中用pthread_exit替代exit。

由于一个进程中的多个线程共享数据段,因此通常在线程退出后,退出线程所占用的资源并不会随线程结束而释放。所有需要pthread_join函数来等待线程结束,类似于wait系统调用。

3.函数原型

#include <pthread.h>
pthread_create(pthread_t *thread,  pthread_attr_t *attr,void *(*start_routine)(void *),void *arg)
thread:线程标识符
attr:线程属性设置
start_routine:线程函数起始地址
arg:传递给start_routine的参数

pthread_exit( void *retval )  //线程内退出
retval: pthread_exit调用者线程的返回值,可由其他函数和pthread_join来检测获取。
pthread_cancel(pthread_t  thread )  //线程外退出


pthread_join( pthread_t th,void  **thread_return )
th:等待线程的标识符
thread_return:用户定义指针,用来存储被等待线程的返回值

pthread_t pthread_self( void );  获取当前线程ID

 

创建线程与主线程通信实例:

#include <iostream>
#include <pthread.h>
using namespace std;

//char str[100];//线程之间可以通过全局变量通信
void *fun(void *arg)//线程之间也可以通过参数进行联系
{
    //设置当前线程自我保护,拒绝其他线程发送过来的取消请求
    pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL);

    char *str = (char*)arg;
    while(1)
    {
        time_t t;
        time(&t);
        cout<<t<<":";
        
        cout<<str<<endl;//主线程循环输出普通线程说的话
        sleep(1);
    }
    return NULL;
}

int main()
{
    char str[100];
    cin>>str;//主线程输入想说的话

    pthread_t id;
    pthread_create(&id,NULL,fun,str);//创建线程,接收参数str,不断输出
    
    sleep(3);
    
    pthread_cancel(id);//取消id线程
    
    pthread_join(id,NULL);
    return 0;
}

运行效果:

打印出hello的同时,还可以继续输入普通线程想说的话,两个线程并发执行。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值