秀杰空间

秀杰笔记
做些有意义的事情
  1. 首页
  2. Linux/Unix C/C++
  3. 正文

UNIX环境高级编程学习之第十一章线程-使用条件变量

2016年9月7日 1791点热度 0人点赞 0条评论

UNIX环境高级编程学习之第十一章线程-使用条件变量
[code lang="cpp"]/*
FileName: condMutexLock.c
Date: 20100617
Desc: g++ condMutexLock.c -lpthread -o demo
使用条件变量
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; // 互斥锁定义并初始化
pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER; // 条件变量定义并初始化
struct msg { // 链表
struct msg *m_next;
char data[100]; // 处理数据
};
struct msg * msgHead = NULL;
void* thread_fun(void * arg)
{
struct msg *msgCur; // 当前数据
while (1)
{
pthread_mutex_lock(&g_mutex);
while(msgHead == NULL)
pthread_cond_wait(&g_cond, &g_mutex);
msgCur = msgHead;
msgHead = msgHead->m_next;
/* 处理数据 msgCur */
printf("Data:%s/n", msgCur->data);
free(msgCur);
msgCur = NULL;
pthread_mutex_unlock(&g_mutex);
}
return (void*)1;
}

int main(int argc, char* argv[])
{
int ret;
pthread_t t;
ret = pthread_create(&t, NULL, thread_fun, NULL);
if (ret != 0)
{
printf("pthread_create() is Error t1 /n");
exit(-1);
}
/* 每隔两秒添加一次数据 */
struct msg *msgCur;
while (1)
{
pthread_mutex_lock(&g_mutex);
msgCur = malloc(sizeof(struct msg));
if (msgCur == NULL)
{
printf("malloc() is Failed! /n");
exit(-1);
}
memset(msgCur, 0x00, sizeof(struct msg));
msgCur->m_next = msgHead;
strcpy(msgCur->data, "Hello");
msgHead = msgCur;
pthread_mutex_unlock(&g_mutex);
pthread_cond_signal(&g_cond);
sleep(2);
}
pthread_mutex_destroy(&g_mutex); // 销毁互斥锁
pthread_cond_destroy(&g_cond); // 销毁条件
return 0;
}

[/code]

标签: UNIX环境高级编程
最后更新:2016年9月7日

秀杰

做些有意义的事情

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2023 个人笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

京ICP备11019155号-2