linux 线程编程:互斥锁创建

来源:互联网 发布:兔先森质量 知乎 编辑:程序博客网 时间:2024/06/05 16:16

今天写一下线程互斥锁的基本用法。

相关函数

#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);

 测试代码

#include <stdio.h>#include <string.h>#include <pthread.h>typedef struct pthread_mutex_test{pthread_mutex_t mutex;unsigned char value;}pthread_mutex_test_t;pthread_mutex_test_t test;void *pfunc_1(void *arg);void *pfunc_2(void *arg);int main(int argc, char **argv){int ret = -1;pthread_t tid_1;pthread_t tid_2;memset(&test, 0, sizeof(test));pthread_mutex_init(&test.mutex, NULL);//初始化互斥锁(test.mutex = PTHREAD_MUTEX_INITIALIZER)ret = pthread_create(&tid_1, NULL, pfunc_1, NULL);if(0 != ret){printf("[%s:%d] pthread_1 create fail\n", __func__, __LINE__);}ret = pthread_create(&tid_2, NULL, pfunc_2, NULL);if(0 != ret){printf("[%s:%d] pthread_2 create fail\n", __func__, __LINE__);}pthread_join(tid_1, NULL);pthread_join(tid_2, NULL);pthread_mutex_destroy(&test.mutex);//注销互斥锁.return 0;}void *pfunc_1(void *arg){int i;for(i=0; i<4; i++){pthread_mutex_lock(&test.mutex);test.value = i;sleep(1);printf("[%s:%d] pthread_1 value:%d\n", __func__, __LINE__, test.value);pthread_mutex_unlock(&test.mutex);}pthread_exit(NULL);}void *pfunc_2(void *arg){int i;for(i=4; i<8; i++){pthread_mutex_lock(&test.mutex);test.value = i;sleep(1);printf("[%s:%d] pthread_2 value:%d\n", __func__, __LINE__, test.value);pthread_mutex_unlock(&test.mutex);}pthread_exit(NULL);}
运行结果

加锁

[pfunc_2:70] pthread_2 value:4
[pfunc_2:70] pthread_2 value:5
[pfunc_2:70] pthread_2 value:6
[pfunc_2:70] pthread_2 value:7
[pfunc_1:55] pthread_1 value:0
[pfunc_1:55] pthread_1 value:1
[pfunc_1:55] pthread_1 value:2
[pfunc_1:55] pthread_1 value:3

不加锁

[pfunc_1:55] pthread_1 value:0
[pfunc_2:70] pthread_2 value:0
[pfunc_2:70] pthread_2 value:5
[pfunc_1:55] pthread_1 value:5
[pfunc_1:55] pthread_1 value:2
[pfunc_2:70] pthread_2 value:3
[pfunc_1:55] pthread_1 value:7
[pfunc_2:70] pthread_2 value:7

0 0
原创粉丝点击