线程间通信之信号量(多文件编程,全局变量的问题)
来源:互联网 发布:php酒店管理系统 编辑:程序博客网 时间:2024/05/18 07:01
线程间通信是利用全局变量来进行通讯的。在多文件编程下,全局变量的引用声明该如何做呢?
下面写一个从标准输入读数据,并且在标准输出打印数据的小程序,来演示一下。
-----thread.h---------------------------------------------#ifndef thread_h#define thread_h#include <stdio.h>#include <pthread.h>#include <semaphore.h>#define N 32sem_t sem;char buf[N] = {}; //带外部链接的静态存储类,如果在头文件中使用带内部链接的静态存储类的话,则系统会在预处理阶段将 //这个引用声明复制到每一个源文件中。#endif
------ffgets.c-------------------------------------#include "thread.h"void *ffgets(void *arg){ extern char buf[N]; while(1) { fgets(buf, sizeof(buf), stdin); sem_post(&sem); if(strncmp(buf, "quit", 4) == 0) break; } pthread_exit("ffgets exit");}
------ffputs.c-------------------------------------#include "thread.h"void *ffputs(void *arg){ extern char buf[N]; while(1) { sem_wait(&sem); if(strncmp(buf, "quit", 4) == 0) break; fputs(buf, stdout); } pthread_exit("ffgets exit");}
------main.c-------------------------------------#include "thread.h"int main(int argc, const char *argv[]){ pthread_t tid1, tid2; void *ret1, *ret2; sem_init(&sem, 0, 0); if(pthread_create(&tid1, NULL, ffgets, NULL) != 0) { perror("create"); return -1; } if(pthread_create(&tid2, NULL, ffputs, NULL) != 0) { perror("create"); return -1; } pthread_join(tid1, &ret1); pthread_join(tid2, &ret2); sem_destroy(&sem); return 0;}
----Makefile----------------------------------------obj:=$(patsubst %.c, %.o, $(wildcard *.c)).PHONY: cleanmain:$(obj) cc -o main $(obj) -pthreadclean: -rm *.o main
阅读全文
0 0
- 线程间通信之信号量(多文件编程,全局变量的问题)
- linux线程间通信之信号量
- windows线程间通信之:信号量
- Unix高级编程:线程的同步之信号量、进程通信之信号量集、system函数、简单web服务器代码
- 线程编程之信号量
- 关于多线程编程中与全局变量通信的问题
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)(r)
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- Java并发编程之十五:线程间通信中notifyAll造成的早期通知问题(含代码)
- 进程间通信之信号量(灯)
- 进程间通信之信号量(三)
- 进程间通信系列 之 信号量详解及编程实例
- 线程间通信的定义及全局变量的方法
- 多进程编程之进程间通信-共享内存,信号量和套接字
- 做了几天杭电ACM感想
- 跑步去了
- LearnOpenGL1.0创建窗口
- 声明式事务
- PAT乙级1024
- 线程间通信之信号量(多文件编程,全局变量的问题)
- 2017.9.27 青蛙的约会 失败总结
- OOP基础
- HDOJ2034
- 利用python制作点读翻译软件(基于google api)
- struts2的传参和struts2的第二种开发方式(继承ActionSupport)
- RN开源项目
- HCS12X–数据访问(如何在CodeWarrior中转换逻辑地址与全局地址)
- [Construct 2] 使用9-patch图片制作按钮