操作系统 基于clone()系统调用
来源:互联网 发布:plc编程软件有哪些 编辑:程序博客网 时间:2024/05/22 02:22
#include "sched.h"
#include "pthread.h"
#include "stdio.h"
#include "stdlib.h"
#include "semaphore.h"
#include "string.h"
int producer(void *args);
int consumer(void *args);
pthread_mutex_t mutex ; // a mutex
sem_t product; //semaphore
sem_t warehouse;
char buffer[8][4];
int bp=0;
int main(int argc ,char **argv)
{
pthread_mutex_init(&mutex,NULL);
sem_init(&product,0,0);
sem_init(&warehouse,0,8);
int clone_flag,arg,retval;
char *stack;
clone_flag=CLONE_VM|CLONE_SIGHAND|CLONE_FS|CLONE_FILES;
int i;
for(i=0;i<2;i++)
{
arg=i;
stack=(char *)malloc(4096);
retval=clone((void *)producer,&(stack[4095]),clone_flag,(void *)&arg);
stack=(char *)malloc(4096);
retval=clone((void *)consumer,&(stack[4095]),clone_flag,(void *)&arg);
}
exit(1);
}
int producer(void *args)
{
int id=*((int *)args);
int i;
for(i=0;i<10;i++)
{
sleep(i+1);
sem_wait(&warehouse);
pthread_mutex_lock(&mutex);
if(id==0)
strcpy(buffer[bp],"aaa/0");
else
strcpy(buffer[bp],"bbb/0");
bp++;
printf("producer %d produce %s in %d/n",id,buffer[bp-1],bp-1);
pthread_mutex_unlock(&mutex);
sem_post(&product);
}
printf("producer %d is over!/n",id);
}
int consumer(void *args)
{
int id=*((int *)args);
int i;
for(i=0;i<10;i++)
{
sleep(10-i);
sem_wait(&product);
pthread_mutex_lock(&mutex);
bp--;
printf("consumer %d get %s in %d/n",id,buffer[bp],bp);
strcpy(buffer[bp],"zzz/0");
pthread_mutex_unlock(&mutex);
sem_post(&warehouse);
}
printf("consumer %d is over!/n",id);
}
编译的时候需要输入参数
gcc -pthread
- 操作系统 基于clone()系统调用
- 用fork系统调用,clone系统调用
- 【操作系统】添加系统调用
- (操作系统)系统调用
- linux系统调用fork, vfork, clone
- linux系统调用fork, vfork, clone
- [转]linux系统调用fork, vfork, clone
- Linux系统调用fork,vfork,clone
- linux 系统调用fork vfork clone
- 操作系统实验 修改系统调用
- 操作系统实验之系统调用
- 操作系统实验-系统调用
- 操作系统-Linux添加系统调用
- 操作系统实验报告-系统调用
- 操作系统 中断异常系统调用
- linux系统调用fork()、vfork()、clone()讲解
- 【进程管理】系统调用fork(),vfork()与clone()
- 系统调用fork()、vfork()与clone()
- ResultSet详解(转)
- UltraEdit-32_14.10.0.1018_SC
- DA9034驱动程序阅读笔记(5)
- php codes
- Android中的MessageQueue,Handler,Looper和Thread
- 操作系统 基于clone()系统调用
- 家乡的变化
- 关于一次谈话
- 有恒心,断无不成之事
- 百万数据查询优化技巧三十则
- ExtJS中的组件体系
- Ollydbg手动脱壳得几点小结,转自www.pediy.com
- C++编程思想(2nd卷一):引用和拷贝构造函数
- C++编程思想(2nd卷一):运算符重载