linux线程同步

来源:互联网 发布:企业数据安全管理 编辑:程序博客网 时间:2024/06/11 14:07

首先介绍几个linux线程同步需要的函数:

pthread_mutex_lock();

pthread_mutex_unlock();

pthread_cond_wait();

pthread_cond_signal();


下面使用一个例子介绍上面几个函数的用法。在主线程接受用户输入信息,在子线程中输入用户输入的信息。

#include <stdio.h>#include <pthread.h>#include <unistd.h>pthread_mutex_t  mutex=PTHREAD_MUTEX_INITIALIZER;pthread_cond_t  cond  =PTHREAD_COND_INITIALIZER;pthread_t  pid;int flag = 0;char buf[1024];void *print(void* arg){        while(1)        {                pthread_mutex_lock(&mutex);                if (flag == 1)                {                        printf("%s\n",buf);                        flag = 0;                }                pthread_cond_signal(&cond);                pthread_mutex_unlock(&mutex);        }}int main(){        pthread_create(&pid,NULL,print,NULL);        while(1)        {                pthread_mutex_lock(&mutex);                printf("input->:");                scanf("%s",buf);                flag = 1;                pthread_cond_wait(&cond,&mutex);                pthread_mutex_unlock(&mutex);        }}

编译方法:

# gcc -lpthread  test.c

pthread_mutex_lock这个函数是获取互斥量。在这个线程没有执行pthread_mutex_unlock时,那么其他线程执行pthread_mutex_lock就会被阻塞。

pthread_cond_wait这个函数是将当前线程阻塞,并且释放互斥量。

pthread_mutex_signal函数是通知调用了pthread_cond_wait的函数,让它脱离阻塞,并且调用了pthread_cond_wait的线程将会重新获取互斥锁。




0 0
原创粉丝点击