Administrator
Administrator
发布于 2024-10-14 / 16 阅读
0
0

C语言多线程编程基础

在 C 语言的多线程编程中,POSIX 线程库(pthread)提供了一系列函数,用于创建、管理和同步线程。下面详细讲解多线程编程中常用的基础函数及其作用。

1. pthread_create

  • 功能:用于创建新线程。
  • 原型
    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
    
  • 参数
    • pthread_t *thread:线程ID,用于标识线程。
    • pthread_attr_t *attr:线程属性,NULL 表示使用默认属性。
    • void *(*start_routine)(void *):线程入口函数,线程从这里开始执行。
    • void *arg:传递给线程函数的参数。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_t thread;
pthread_create(&thread, NULL, myThreadFunc, arg);

2. pthread_exit

  • 功能:终止当前线程。
  • 原型
    void pthread_exit(void *retval);
    
  • 参数
    • retval:线程的返回值,可供其他线程通过 pthread_join() 获取。
  • 该函数不会返回,一旦调用后线程立刻退出。

示例

pthread_exit(NULL);  // 线程退出

3. pthread_join

  • 功能:阻塞主线程,等待指定线程结束,并获取该线程的返回值。
  • 原型
    int pthread_join(pthread_t thread, void **retval);
    
  • 参数
    • pthread_t thread:要等待的线程的ID。
    • void **retval:用于存储线程的返回值,若不需要可以传 NULL
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_join(thread, NULL);  // 等待线程结束

4. pthread_mutex_init

  • 功能:初始化互斥锁(mutex),互斥锁用于保护共享资源,确保同一时间只有一个线程访问资源。
  • 原型
    int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
    
  • 参数
    • pthread_mutex_t *mutex:指向互斥锁的指针。
    • pthread_mutexattr_t *attr:互斥锁的属性,传 NULL 表示使用默认属性。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_mutex_t lock;
pthread_mutex_init(&lock, NULL);  // 初始化互斥锁

5. pthread_mutex_lock

  • 功能:加锁。线程调用该函数时,如果该互斥锁已经被其他线程加锁,则调用线程会阻塞,直到锁可用。
  • 原型
    int pthread_mutex_lock(pthread_mutex_t *mutex);
    
  • 参数
    • pthread_mutex_t *mutex:指向互斥锁的指针。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_mutex_lock(&lock);  // 加锁

6. pthread_mutex_unlock

  • 功能:解锁。调用该函数后,锁被释放,其他等待的线程可以继续执行。
  • 原型
    int pthread_mutex_unlock(pthread_mutex_t *mutex);
    
  • 参数
    • pthread_mutex_t *mutex:指向互斥锁的指针。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_mutex_unlock(&lock);  // 解锁

7. pthread_mutex_destroy

  • 功能:销毁互斥锁,释放相关资源。互斥锁在不再使用时需要销毁。
  • 原型
    int pthread_mutex_destroy(pthread_mutex_t *mutex);
    
  • 参数
    • pthread_mutex_t *mutex:指向互斥锁的指针。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_mutex_destroy(&lock);  // 销毁互斥锁

8. pthread_cond_init

  • 功能:初始化条件变量。条件变量用于线程之间的同步机制,一个线程可以等待条件变量,另一个线程可以发信号满足条件。
  • 原型
    int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
    
  • 参数
    • pthread_cond_t *cond:指向条件变量的指针。
    • pthread_condattr_t *attr:条件变量的属性,NULL 表示使用默认属性。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_cond_t cond;
pthread_cond_init(&cond, NULL);  // 初始化条件变量

9. pthread_cond_wait

  • 功能:阻塞等待条件变量。当条件未满足时,线程会阻塞等待,直到收到其他线程发出的条件满足信号。
  • 原型
    int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
    
  • 参数
    • pthread_cond_t *cond:指向条件变量的指针。
    • pthread_mutex_t *mutex:与条件变量相关的互斥锁,必须先获得锁,然后在等待条件时自动释放锁。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_mutex_lock(&lock);
pthread_cond_wait(&cond, &lock);  // 等待条件变量
pthread_mutex_unlock(&lock);

10. pthread_cond_signal

  • 功能:发送信号,唤醒一个等待在条件变量上的线程。
  • 原型
    int pthread_cond_signal(pthread_cond_t *cond);
    
  • 参数
    • pthread_cond_t *cond:指向条件变量的指针。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_cond_signal(&cond);  // 发出信号

11. pthread_cond_broadcast

  • 功能:发送广播信号,唤醒所有等待在条件变量上的线程。
  • 原型
    int pthread_cond_broadcast(pthread_cond_t *cond);
    
  • 参数
    • pthread_cond_t *cond:指向条件变量的指针。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_cond_broadcast(&cond);  // 唤醒所有等待的线程

12. pthread_cond_destroy

  • 功能:销毁条件变量,释放相关资源。
  • 原型
    int pthread_cond_destroy(pthread_cond_t *cond);
    
  • 参数
    • pthread_cond_t *cond:指向条件变量的指针。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_cond_destroy(&cond);  // 销毁条件变量

13. pthread_cancel

  • 功能:用于请求取消某个线程的执行。线程可以通过设置取消状态来响应取消请求。
  • 原型
    int pthread_cancel(pthread_t thread);
    
  • 参数
    • pthread_t thread:要取消的线程的ID。
  • 返回值:成功返回 0,失败返回错误码。

示例

pthread_cancel(thread);  // 请求取消线程

总结:

  • 线程创建和管理

    • pthread_create:创建线程。
    • pthread_join:等待线程完成。
    • pthread_exit:终止线程。
    • pthread_cancel:取消线程。
  • 互斥锁

    • pthread_mutex_init:初始化互

斥锁。

  • pthread_mutex_lock:加锁。

  • pthread_mutex_unlock:解锁。

  • pthread_mutex_destroy:销毁互斥锁。

  • 条件变量

    • pthread_cond_init:初始化条件变量。
    • pthread_cond_wait:等待条件满足。
    • pthread_cond_signal:发出信号,唤醒一个线程。
    • pthread_cond_broadcast:广播信号,唤醒所有线程。
    • pthread_cond_destroy:销毁条件变量。

这些基础函数提供了多线程编程中的线程创建、同步和管理的基本工具。在多线程编程中,正确使用这些函数确保线程之间的协作和共享资源的安全性。


评论