📜  C C++中的线程函数(1)

📅  最后修改于: 2023-12-03 15:29:41.867000             🧑  作者: Mango

C/C++中的线程函数

在多线程编程中,线程函数是非常重要的一环。线程函数是需要被并发执行的代码块,它会被封装成线程并加入到进程中。C/C++提供了一系列线程函数供程序员使用。本文将介绍C/C++中常用的线程函数,涉及线程创建、等待、退出及互斥量的使用。

线程创建

C/C++中使用pthread_create函数创建线程,其函数原型如下:

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

其中,参数说明如下:

  • thread:新创建的线程ID指针
  • attr:线程属性,可用NULL表示默认属性
  • start_routine:线程执行函数,线程被创建后会立即执行该函数
  • arg:线程执行函数的参数,如果函数无参数则为NULL

注意:start_routine函数的返回值必须是void*类型,而且必须强制类型转换为程序员定义的返回类型。

下面是一个例子:

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

void* sayHello(void* args)
{
    printf("Hello World\n");
    return NULL;
}

int main()
{
    pthread_t pid;
    pthread_create(&pid, NULL, sayHello, NULL);
    pthread_join(pid, NULL);
    return 0;
}
线程等待

C/C++中使用pthread_join函数等待线程结束,其函数原型如下:

int pthread_join(pthread_t thread, void** retval);

其中,参数说明如下:

  • thread:等待结束的线程ID
  • retval:线程返回值的存储空间,如果不需要可用NULL表示

下面是一个例子:

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

void* sayHello(void* args)
{
    printf("Hello World\n");
    return NULL;
}

int main()
{
    pthread_t pid;
    pthread_create(&pid, NULL, sayHello, NULL);
    pthread_join(pid, NULL);
    return 0;
}
线程退出

C/C++中使用pthread_exit函数主动退出线程,其函数原型如下:

void pthread_exit(void* retval);

其中,参数说明如下:

  • retval:线程返回值,通过pthread_join函数获取

下面是一个例子:

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

void* sayHello(void* args)
{
    printf("Hello World\n");
    pthread_exit(NULL);
}

int main()
{
    pthread_t pid;
    pthread_create(&pid, NULL, sayHello, NULL);
    pthread_join(pid, NULL);
    return 0;
}
互斥量

C/C++中使用pthread_mutex_initpthread_mutex_lockpthread_mutex_unlockpthread_mutex_destroy函数实现互斥量,其中,函数原型如下:

int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attr);
int pthread_mutex_lock(pthread_mutex_t* mutex);
int pthread_mutex_unlock(pthread_mutex_t* mutex);
int pthread_mutex_destroy(pthread_mutex_t* mutex);

其中,参数说明如下:

  • mutex:互斥量对象
  • attr:互斥量属性,可用NULL表示默认属性

下面是一个例子:

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

int count = 0;
pthread_mutex_t mutex;

void* increment(void* args)
{
    pthread_mutex_lock(&mutex);
    count++;
    pthread_mutex_unlock(&mutex);
    return NULL;
}

int main()
{
    pthread_t p1, p2;
    pthread_mutex_init(&mutex, NULL);
    pthread_create(&p1, NULL, increment, NULL);
    pthread_create(&p2, NULL, increment, NULL);
    pthread_join(p1, NULL);
    pthread_join(p2, NULL);
    printf("Count = %d\n", count);
    pthread_mutex_destroy(&mutex);
    return 0;
}

以上就是C/C++中常用的线程函数和互斥量使用方法的介绍。在进行多线程编程时,需要谨慎使用这些函数,以确保程序的正确性和稳定性。