一、简介
线程(Thread)是Linux下的一种轻量级进程,它可以使程序并发执行,从而提高程序的执行效率,pthread库是Linux下用于创建和管理线程的标准C库,本文将介绍如何在Linux下创建和使用pthread线程。
二、创建线程
1. 定义线程函数
在Linux下,线程函数需要遵循以下格式:
```c
include
void *thread_function(void *arg);
其中,`thread_function`是线程函数名,`arg`是传递给线程函数的参数。 2. 创建线程 使用`pthread_create`函数创建线程。该函数原型如下: ```c #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
`thread`指针用于存储新创建线程的ID;`attr`是一个指向线程属性对象的指针,如果不需要设置线程属性,可以传入NULL;`start_routine`是指向线程函数的指针;`arg`是传递给线程函数的参数。
下面是一个简单的示例:
include
void *print_hello(void *arg)
{
int thread_id = *((int *)arg);
printf("Hello from thread %d!
", thread_id);
pthread_exit(NULL);
}
int main()
pthread_t threads[5];
int thread_ids[5];
for (int i = 0; i < 5; i++)
{
thread_ids[i] = i;
int ret = pthread_create(&threads[i], NULL, print_hello, (void *)&thread_ids[i]);
if (ret != 0)
{
printf("Error creating thread %d: %d
", i, ret);
return -1;
}
}
pthread_join(threads[i], NULL);
return 0;
3. 等待线程结束 使用`pthread_join`函数等待线程结束。该函数原型如下: ```c #include <pthread.h> int pthread_join(pthread_t thread, void **retval);
`thread`是要等待结束的线程ID;`retval`是一个指向返回值的指针,如果不关心线程的返回值,可以传入NULL。
三、线程同步与互斥
为了避免多个线程同时访问共享资源导致的数据不一致问题,我们需要使用同步与互斥机制,常用的同步与互斥机制有互斥锁(mutex)、条件变量(condition variable)等,下面以互斥锁为例进行介绍。
1. 初始化互斥锁(mutex)和条件变量(condition variable)
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 初始化互斥锁
pthread_cond_t cond = PTHREAD_COND_INITIALIZER; // 初始化条件变量
2. 加锁和解锁互斥锁(mutex) 在访问共享资源之前,需要先加锁互斥锁。加锁可以使用`pthread_mutex_lock`函数。例如: ```c pthread_mutex_lock(&mutex); // 加锁互斥锁 // 访问共享资源的代码... pthread_mutex_unlock(&mutex); // 解锁互斥锁
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/55090.html