线程中常用的函数

一,创建线程

phread_create函数

功能:创建一个新的线程。

原型:

#include <pthread.h>

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

参数:

thread:输出型参数,输出线程的id;

attr:设置线程的属性,如果为空,则代表设置为默认属性;

statr_routine:线程创建后要执行的函数;

arg:线程要执行函数的参数;

返回值:

成功则返回0,失败则返回-1,并设置相关的错误码

二,线程终止

pthread_exit函数

功能:线程终止
原型:
void pthread_exit(void *value_ptr);
参数:
value_ptr:value_ptr不要指向一个局部变量,它指向的数据将作为线程退出时的返回值。如果线程不需要返回任何数据,将 retval 参数置为 NULL 即可。
返回值:无返回值,跟进程一样,线程结束的时候无法返回到它的调用者(自身)
具体使用如下:
#include <pthread.h>
#include <iostream>
#include <unistd.h>
using namespace std;

int x=1;
void *fun(void *arg)
{
    string s = (char *)arg;
    pthread_exit((void*)&x);
    while (true)
    {
        cout << s << endl;
        sleep(1);
    }
}
int main()
{
    pthread_t thread;
    char name[64];
    snprintf(name, sizeof name, "%s", "我是从线程");
    int n = pthread_create(&thread, nullptr, fun, (void *)name);
    int* ret;
    int m=pthread_join(thread,(void**)&ret);
    cout<<*ret<<endl;
}

运行结果如下:

pthread_cancel函数
功能: 取消一个线程的执行(可以是其他线程使用该函数取消该线程,也可以是自己取消自己)
原型:
int pthread_cancel(pthread_t thread);
参数
thread:线程的id号
返回值 如果成功,pthread_cancel()返回0;当出现错误时,它返回一个非零的错误编号。
具体使用如下:
#include <pthread.h>
#include <iostream>
#include <unistd.h>
using namespace std;

int x=1;
void *fun(void *arg)
{
    string s = (char *)arg;
    //pthread_exit((void*)&x);
    int i=0;
    while (true)
    {
        cout << s << endl;
        i++;
        if(i==5) pthread_cancel(pthread_self()/*获取自身线程id*/);
        sleep(1);

    }
}
int main()
{
    pthread_t thread;
    char name[64];
    snprintf(name, sizeof name, "%s", "我是从线程");
    int n = pthread_create(&thread, nullptr, fun, (void *)name);
    int* ret;
    int m=pthread_join(thread,nullptr);
    cout<<"从线程退出"<<endl;
    while(true)
    {
        sleep(1);
    }
    return 0;
}

执行结果如下

三,等待线程
pthread_join函数
功能:等待从线程终止或停止运行,并且接受从进程返回的相关数据
原型:
int pthread_join(pthread_t thread,void** value_ptr );
参数:
thread:要等待的从线程的id号
value_ptr:输出型参数,接受从线程的返回值,如果设置为空则代表忽略从进程的返回值
返回值 如果成功,pthread_join()返回0;当出现错误时,它返回一个错误编号
四,分离线程
pthread_detach函数
功能:分离一个线程(当一个线程被分离,这是主线程就不会再关注这个被分离的从线程,在从线程执行完毕时,将自动释放自身资源,这时如果在使用pthread_join函数对该线程进行等待将会出现错误)
原型:
int pthread_detach(pthread_t thread);
参数
thread:要分离的从线程id;
返回值:如果成功,pthread_detach()返回0;当出现错误时,它返回一个错误编号。
具体操作如下
#include <pthread.h>
#include <iostream>
#include <unistd.h>
using namespace std;

int x=1;
void *fun(void *arg)
{
    pthread_detach(pthread_self());
    string s = (char *)arg;
    //pthread_exit((void*)&x);
    int i=0;
    while (true)
    {
        cout << s << endl;
        i++;
        if(i==5) break;//pthread_cancel(pthread_self()/*获取自身线程id*/);
        sleep(1);
    }
    return (void*)&x;
}
int main()
{
    pthread_t thread;
    char name[64];
    snprintf(name, sizeof name, "%s", "我是从线程");
    int n = pthread_create(&thread, nullptr, fun, (void *)name);
    int* ret;
    sleep(2);
    int m=pthread_join(thread,(void**)&ret);
    cout<<m<<endl;
    while(true)
    {
        sleep(1);
    }
    return 0;
}

运行结果,返现m不是0,而是22;


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值