易截截图软件、单文件、免安装、纯绿色、仅160KB

linux下生产者消费者的实现

 #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
#define M 10 // 缓冲数目
int in = 0;   // 生产者放置产品的位置
int out = 0; // 消费者取产品的位置
int buff[M] = {0}; // 缓冲初始化为0, 开始时没有产品
sem_t empty_sem; // 同步信号量, 当满了时阻止生产者放产品
sem_t full_sem;   // 同步信号量, 当没产品时阻止消费者消费
pthread_mutex_t mutex; // 互斥信号量, 一次只有一个线程访问缓冲
int product_id = 0;   //生产者id
int prochase_id = 0; //消费者id
/* 打印缓冲情况 */
void print()
{
int i;
for(i = 0; i < M; i++)
   printf("%d ", buff[i]);
printf("\n");
}
/* 生产者方法 */
void *product()
{
int id = ++product_id;
while(1)
{
   // 用sleep的数量可以调节生产和消费的速度,便于观察
   sleep(1);
   //sleep(1);
 
   sem_wait(&empty_sem);
   pthread_mutex_lock(&mutex);
 这二句如果颠倒的话,可能出现一种异常情况,
当进入了缓冲区为满时,颠倒之后会对缓冲区先加锁,然后,进程由于缓冲区为买没法生产产品,在这里被阻塞,而消费者又无法获得缓冲区的锁进入缓冲区,因而会出现死锁
  
   in = in % M;
   printf("product%d in %d. like: \t", id, in);
 
   buff[in] = 1; 
   print(); 
   ++in;
 
   pthread_mutex_unlock(&mutex);
   sem_post(&full_sem); 
}
}
/* 消费者方法 */
void *prochase()
{
int id = ++prochase_id;
while(1)
{
   // 用sleep的数量可以调节生产和消费的速度,便于观察
   sleep(2);
  
   sem_wait(&full_sem);       //  这二句如果颠倒的话,可能出现一种异常情况,
当进入了缓冲区为空时,颠倒之后会对缓冲区先加锁,然后,进程由于缓冲区为空没发消费产品,在这里被阻塞,而生产者又无法获得缓冲区的锁进入缓冲区,因而会出现死锁
   pthread_mutex_lock(&mutex);


相关文档:

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

在linux的PC上挂载jffs2根文件系统映像

我们在调试硬件板时,经常需要做多个jffs2的根文件系统映像,有时也要对比其他途径得到的可用的jffs2根文件系统映像。但jffs2的文件系统映像不象光盘的映像文件一样可以通过loop设备来挂载,总不可能一个个烧录到硬件板去看吧。 后来到网上google了一把,左翻右翻之后总算找到了一个方法。因为jffs2是构建于MTD设备上的文� ......

一个Linux学习高手写给初学者的话

      现在好多的人开始接触电脑的时候,见到的应该是Windows98
说实话,98
已经是一个很人性化,封装的很好的一个系统了一个对电脑一窍不通的人都能很快的使用它。这样很多人对"
电脑"
的印象和那些和我一样一开始接触的是DOS
人是绝然不同的。在DOS
时代,如果你对电脑的基础� ......

Linux 防火墙开关命令

 1) 永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
开启和关闭端口相关配置文件
/etc/sysconfig/iptables ......

用Vmware安装linux提示未找到任何驱动器

 
screen.width*0.7)
{this.resized=true; this.width=screen.width*0.7; this.alt='Click here
to open new window\nCTRL Mouse wheel to zoom in/out';}"
onmouseover="if(this.width>screen.width*0.7) {this.resized=true;
this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='C ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号