这是一个多线程例子,里面只有两个线程,是生产者/消费者模式,已编译通过,注释很详细,\x0d\如下:\x0d\\x0d\/ 以生产者和消费者模型问题来阐述Linux线程的控制和通信你 \x0d\ 生产者线程将生产的产品送入缓冲区,消费者线程则从中取出产品。\x0d\ 缓冲区有N个,是一个环形的缓冲池。\x0d\ /\x0d\#include \x0d\#include \x0d\\x0d\#define BUFFER_SIZE 16\x0d\\x0d\struct prodcons\x0d\{\x0d\ int buffer[BUFFER_SIZE];/实际存放数据的数组/\x0d\ pthread_mutex_t lock;/互斥体lock,用于对缓冲区的互斥 *** 作/\x0d\ int readpos,writepos; /读写指针/\x0d\ pthread_cond_t notempty;/缓冲区非空的条件变量/\x0d\ pthread_cond_t notfull;/缓冲区未满 的条件变量/\x0d\};\x0d\\x0d\/初始化缓冲区/\x0d\void pthread_init( struct prodcons p)\x0d\{\x0d\ pthread_mutex_init(&p->lock,NULL);\x0d\ pthread_cond_init(&p->notempty,NULL);\x0d\ pthread_cond_init(&p->notfull,NULL);\x0d\ p->readpos = 0;\x0d\ p->writepos = 0;\x0d\}\x0d\\x0d\/将产品放入缓冲区,这里是存入一个整数/\x0d\void put(struct prodcons p,int data)\x0d\{\x0d\ pthread_mutex_lock(&p->lock);\x0d\ /等待缓冲区未满/\x0d\ if((p->writepos +1)%BUFFER_SIZE ==p->readpos)\x0d\ {\x0d\ pthread_cond_wait(&p->notfull,&p->lock);\x0d\ }\x0d\ p->buffer[p->writepos] =data;\x0d\ p->writepos++;\x0d\ if(p->writepos >= BUFFER_SIZE)\x0d\ p->writepos = 0;\x0d\ pthread_cond_signal(&p->notempty);\x0d\ pthread_mutex_unlock(&p->lock);\x0d\}\x0d\/从缓冲区取出整数/\x0d\int get(struct prodcons p)\x0d\{\x0d\ int data;\x0d\ pthread_mutex_lock(&p->lock);\x0d\ /等待缓冲区非空/\x0d\ if(p->writepos == p->readpos)\x0d\ {\x0d\ pthread_cond_wait(&p->notempty ,&p->lock);//非空就设置条件变量notempty\x0d\ }\x0d\ /读书据,移动读指针/\x0d\ data = p->buffer[p->readpos];\x0d\ p->readpos++;\x0d\ if(p->readpos == BUFFER_SIZE)\x0d\ p->readpos = 0;\x0d\ /设置缓冲区未满的条件变量/\x0d\ pthread_cond_signal(&p->notfull);\x0d\ pthread_mutex_unlock(&p->lock);\x0d\ return data;\x0d\}\x0d\ /测试:生产站线程将1 到1000的整数送入缓冲区,消费者线程从缓冲区中获取整数,两者都打印信息/\x0d\#define OVER (-1)\x0d\struct prodcons buffer;\x0d\void producer(void data)\x0d\{\x0d\ int n;\x0d\ for( n=0;n\n",n);\x0d\ put(&buffer,n);\x0d\ }\x0d\ put(&buffer,OVER);\x0d\ return NULL;\x0d\}\x0d\void consumer(void data)\x0d\{\x0d\ int d;\x0d\ while(1)\x0d\ {\x0d\ d = get(&buffer);\x0d\ if(d == OVER)\x0d\ break;\x0d\ else\x0d\ printf("----->%d\n",d);\x0d\ }\x0d\ return NULL;\x0d\}\x0d\int main()\x0d\{\x0d\ pthread_t th_p,th_c;\x0d\ void retval;\x0d\ pthread_init(&buffer);\x0d\ pthread_create(&th_p,NULL,producer,0);\x0d\ pthread_create(&th_c,NULL,consumer,0);\x0d\ /等待两个线程结束/\x0d\ pthread_join(th_p, &retval);\x0d\ pthread_join(th_c,&retval);\x0d\ return 0;\x0d\}
上了大学有很多同学都在学习C语言,C++就是C语言的一种,那么怎么用c语言写一个简单的程序hello world呢,下边来给大家演示一下
工具/材料电脑,c语言软件
鼠标左键双击c语言软件,打开,打开后界面如图,点击关闭即可
点击上方程序窗口左上角的文件,选择新建
在打开的窗口中选择文件,下边一般是第四个 c++Source file,输入文件名(hellwc),一定要以“c”为后缀结尾
进入编辑页面在,页面编辑源代码就可以
#include<stdioh>
void main()
{
printf("hello world!"n);
}
然后选择保存,打印,输出运行。
输出的效果就是这样了,一个简单的c语言程序就写好了
特别提示所有的输入都要在英文半角的情况下输入,不然程序会不能识别,会报错。
学习PLC编程首先需要从理论基础开始。
1)学习PLC的基本原理。
硬件:搞清楚输入和输出端的基本结构,熟悉端口的基本电气要求。
软件:对于PLC系统,必须搞清楚什么是I/O刷新,这是编程的基础,知道PLC的工作循环。
推荐学习《可编程控制器原理及应用》。
2)学习基本指令。
可以先从梯形图语言开始,先练习基本的逻辑指令。学些各种逻辑指令块。推荐学习《PLC自学手册》
3)实践。
可以在模拟器上模拟练习:(一般PLC编程器都有模拟的功能)。编写PLC程序,编译运行,手动输入一些信号,观看输出端口的信号变化是否满足程序的要求。最后实战。
plc编程的方法:
1、经验法
即是运用自己的或别人的经验进行设计,设计前选择与设计要求相类似的成功的例子,并进行修改,增删部分功能或运用其中部分程序,直至适合自己的情况。在工作过程中,可收集与积累这样成功的例子,从而可不断丰富自己的经验。
2、解析法
可利用组合逻辑或时序逻辑的理论,并运用相应的解析方法,对其进行逻辑关系的求解,然后再根据求解的结果,画成梯形图或直接写出程序。解析法比较严密,可以运用一定的标准,使程序优化,可避免编程的盲目性,是较有效的方法。
以上就是关于c语言如何编写一个简单的多线程程序全部的内容,包括:c语言如何编写一个简单的多线程程序、如何用C语言编写一个简单的程序!、编程的步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)