秀杰空间

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

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

2016年9月7日 648点热度 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日

秀杰

做些有意义的事情

点赞
< 上一篇
下一篇 >

文章评论

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

秀杰

做些有意义的事情

标签聚合
tuxedo zookeeper UNIX环境高级编程 分布式 ubuntu select socket mac pb epoll protobuf
最新 热点 随机
最新 热点 随机
C++使用protobuf快速入门简明教程 Mac安装Brew(Homebrew)国内镜像源加速 从sockaddr_storage结构中取IP地址和端口 [转载]分布式之数据库和缓存双写一致性方案解析 TPS和QPS的区别和理解 2018最新可靠好用的DNS服务器地址汇总
UNIX环境高级编程学习之第十一章线程-用互斥锁传送安全线程参数 malloc的对象调用它的构造函数 C++使用protobuf快速入门简明教程 UNIX环境高级编程学习之第十二章线程控制-可重入(线程安全)的getenv方法 UNIX环境高级编程学习之第十六章网络IPC:套接字 - 简单UDP Socket 通信 UNIX环境高级编程学习之第十一章线程-线程的创建、退出、等待、取消、分离
京ICP备11019155号-2

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

Theme Kratos Made By Seaton Jiang