pthread相关简介

                                                                                                                                                      pthread相关简介
 
int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void*(*start_routine)(void*),  void *arg);
参数tid用于返回新创建线程的线程号;start_routine是线程函数指针,线程从这个函数开始运行;arg是传递给线程函数的参数。由于start_routine是一个指向参数类型为void*,返回值为void*的指针,所以如果需要传递或返回多个参数时,可以使用强制类型转化。

void pthread_exit(void* value_ptr);
参数value_ptr是一个指向返回状态值的指针。

int pthread_join( pthread_t tid,  void **status);
参数tid是希望等待的线程的线程号,status是指向线程返回值的指针,线程的返回值就是pthread_exit中的value_ptr参数,或者是return语句中的返回值,该函数可用于线程间的同步。

int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t* attr);
该函数初始化一个互斥变量,如果参数attr为NULL,则互斥体变量mutex使用默认的属性。

int pthread_mutex_lock(pthread_mutex_t *mutex);
该函数用来锁住互斥体变量,如果参数mutex所指的互斥体已经被锁住了,那么发出调用的线程将被阻塞直到其他线程对mutex解锁。

int pthread_mutex_trylock(pthread_t *mutex);
该函数用来锁住mutex所指定的互斥体,但不阻塞。如果该互斥体已经被上锁,该调用不会阻塞等待,而会返回一个错误代码。

int pthread_mutex_unlock(pthread_mutex_t *mutex);
该函数用来对一个互斥体解锁。如果当前线程拥有参数mutex所指定的互斥体,该调用将该互斥解锁。

int pthread_mutex_destroy(pthread_mutex_t *mutex);
该函数用来释放分配给参数mutex的资源。调用成功时返回值为0,否则返回一个非0的错误代码。

int pthread_cond_int(pthread_cond_t *cond,const pthread_cond_attr_t *attr);
该函数按参数attr指定的属性创建一个条件变量。调用成功返回,并将条件变量ID赋值给参数cond,否则返回错误代码。

int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
该函数调用为参数mutex指定的互斥体解锁,等待一个事件(由参数cond指定的条件变量)发生。调用函数的线程被阻塞直到有其他线程调用pthread_cond_signal或pthread_cond_broadcast函数置相应的条件变量,而且获得mutex互斥时才解除阻塞。

int pthread_cond_timewait(pthread_cond_t *cond,pthread_mutex_t *mutex,const struct timespec *abstime);
该函数与pthread_cond_wait不同的是当系统时间到达abstime参数指定的时间时,被阻塞线程也可以被唤起继续执行。

int pthread_cond_broadcast(pthread_cond_t *cond);
该函数用来对所有等待参数cond所指定的条件变量的线程解除阻塞,调用成功返回0,否则为错误代码。

int pthread_cond_signal(pthread_cond_t *cond);
该函数的作用是解除一个等待参数cond所指定的条件变量,也只唤醒一个线程。

int pthread_cond_destroy(pthread_cond_t *cond);
该函数释放一个条件变量。释放为条件变量cond所分配的资源。调用成功返回值为0,否则为错误代码。

int pthread_key_create(pthread_key_t key,void(*destructor(void*)));
该函数创建一个键值,该键值映射到一个专有数据结构体上。如果第二个参数不是NULL,这个键值被删除时将调用这个函数指针来释放数据空间。

int pthread_key_delete(pthread_key_t *key);
该函数用于删除一个由pthread_key_create函数调用创建的TSD键。调用成功返回值0,否则为返回错误代码。

int pthread_setspecific(pthread_key_t key,const void(value));
该函数设置一个线程专有数据的值,赋给由pthread_key_create创建的TSD键,调用成功返回值为0,否则返回错误代码。

void* pthread_getspecific(pthread_key_t *key);
该函数获得绑定到指定的TSD键上的值。调用成功,返回给定参数key所对应的数据。如果没有数据连接到该TSD键,则返回NULL。

int pthread_once(pthread_once_t* once_control,void(*int_routine)(void));
该函数的作用是确保init_routine指向的函数,在调用pthread_once的线程中只被运行一次。once_control指向一个静态或全局的变量。
 
pthread_mutex_t 相关函数包括初始化互斥量、销毁互斥量、加锁互斥量、尝试加锁互斥量和解锁互斥量等。具体函数如下: 1. 初始化互斥量: ``` int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); ``` 该函数用于初始化互斥量对象,参数mutex是指向互斥量对象的指针,参数attr是指向互斥量属性对象的指针,可以为NULL。 2. 销毁互斥量: ``` int pthread_mutex_destroy(pthread_mutex_t *mutex); ``` 该函数用于销毁互斥量对象,参数mutex是指向互斥量对象的指针。 3. 加锁互斥量: ``` int pthread_mutex_lock(pthread_mutex_t *mutex); ``` 该函数用于加锁互斥量,如果互斥量已被锁住,则调用线程将被阻塞,直到互斥量可用。 4. 尝试加锁互斥量: ``` int pthread_mutex_trylock(pthread_mutex_t *mutex); ``` 该函数尝试加锁互斥量,如果互斥量已被锁住,则返回EBUSY错误码,否则成功加锁。 5. 解锁互斥量: ``` int pthread_mutex_unlock(pthread_mutex_t *mutex); ``` 该函数用于解锁互斥量,如果有其他线程正在等待该互斥量,则其中一个线程将被唤醒,获得互斥量的控制权。 在使用互斥量时,一般需要先初始化互斥量对象,然后在需要保护的临界区前后加锁和解锁互斥量,以确保临界区的互斥访问。例如: ``` pthread_mutex_t mtx; pthread_mutex_init(&mtx, NULL); // 初始化互斥量 pthread_mutex_lock(&mtx); // 加锁 //...受到锁保护的临界区 pthread_mutex_unlock(&mtx); // 解锁 pthread_mutex_destroy(&mtx); // 销毁互斥量 ```<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [linux线程互斥量pthread_mutex_t使用简介](https://blog.csdn.net/guotianqing/article/details/80559865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Linux环境下 解决线程共享资源冲突 —— 互斥锁(代码实现及底层原理)](https://blog.csdn.net/challenglistic/article/details/124755816)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值