pthread多线程

pthread是linux下C语言执行多线程操作的基础,操作多线程的操作全部在pthread.h头文件中,跟线程密切相关的操作包括创建、退出以及主线程的等待。

一、创建线程

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

1、参数
函数的第一个参数返回的是一个线程的指针,该指针唯一的标识创建的线程。
参数attr用来设置线程的属性,一般我们设置为NULL,即采用系统的默认设置。
第三个参数是线程将要执行的方法,或者说是线程的主体,该参数是一个函数指针,参数和返回值都是void*类型。
第四个参数是第三个参数代表的方法所需要的参数。
2、返回值
当创建线程成功时,该方法返回一个不为0的int。

二、离开线程(销毁线程)

void pthread_exit(void* retval)

该方法离开该线程,并且返回一个指向某个对象的指针(该指针不能用来指向一个局部变量,因为离开线程之后,线程被销毁,资源被释放)

三、等待线程
1、在绝大多数情况下,我们需要在主线程中等待子进程的完成,然后执行后续操作,这样我们就需要pthread_join函数来完成任务。
2、该方法类似于fork中的wait,但不同的是,该方法面向的对象是线程而非进程,主线程会一直挂起,直到等待的子线程返回。

int pthread_join(pthread_t t,void** thread_return)

参数t表示等待的子线程的唯一标识。
参数thread_return是一个void*值的地址,该参数得到的是线程的返回数据,即为pthred_exit中的参数值。

四 、示例
在主线程中创建一个线程,然后等待子线程完成,并且在子线程中修改了一个全局变量message,然后等子线程返回后在重新打印message的值。

#include <stdio.h>
#include <pthread.h>
#include <string.h>

char message[] = "hello word!";
void *threadTest(void *arg)
{
    printf("test thread is running, the argument is: %s\n", (char*)arg);
    strcpy(message,"good bye!");
    pthread_exit("thank you for cpu time!");
}
int main()
{
    pthread_t threadID;
    void *threadRes;
    int res;
    res = pthread_create(&threadID, NULL, threadTest, (void *)message);
    if (res != 0)
    {
        printf("pthread creat error!\n");
    }
    printf("waiting test thread finish.\n");
    res = pthread_join(threadID, &threadRes);
    if (res != 0)
    {
        printf("pthread join error!\n");
    }
    printf("pthread join result is: %s\n", (char *)threadRes);
    printf("message now is: %s\n", message);
    pthread_exit(NULL);
    return 0;
}

运行:gcc thread.c -o test -lpthread

waiting test thread finish.
test thread is running, the argument is: hello word!
pthread join result is: thank you for cpu time!
message now is: good bye!
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pthread是一种使用C语言编写的多线程库,它可以方便地实现多线程并行编程。使用pthread库,我们可以在一个进程中创建多个线程,每个线程可以同时执行不同的任务,以实现并行处理。 pthread库的优势主要有以下几点: 1. 提高程序的运行效率:多线程可以将一个任务划分成若干个子任务,每个子任务由一个线程处理,从而充分利用多核处理器的性能,提高程序的运行效率。 2. 提升程序的响应性能:多线程可以将繁重的计算或耗时的任务放在后台线程中进行处理,使得前台线程能够响应用户的操作,提升程序的响应性能。 3. 简化编程复杂度:使用pthread库可以方便地创建、管理和控制多个线程,提供了丰富的线程相关的函数和工具,可以简化多线程编程的复杂度。 在pthread多线程并行编程中,我们需要注意以下几点: 1. 线程的创建和销毁:使用pthread库可以通过pthread_create函数创建一个新线程,并通过pthread_join函数等待线程的结束。在合适的时机,我们需要使用pthread_exit函数主动退出线程,以释放资源。 2. 线程的同步和互斥:多个线程之间可能会访问共享资源,我们需要使用pthread_mutex_t互斥锁来确保同一时间只有一个线程可以访问共享资源,以避免竞争条件的发生。 3. 线程的通信和协作:线程之间可以通过共享内存、全局变量等方式进行通信。多个线程之间可以通过条件变量(pthread_cond_t)和信号量(sem_t)等机制进行协作,实现任务的分配和控制。 总之,pthread多线程并行编程可以充分利用多核处理器的性能,实现任务的并行处理,提高程序的运行效率和响应性能。但在编程过程中需要注意线程的创建和销毁、线程的同步和互斥、线程的通信和协作等问题,以确保多线程程序的正确性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值