コード例 #1
0
ファイル: pc2.c プロジェクト: huaguang/OS_CD
void *produce(void*args)
{
    int i;
    int item;
    for (i = 0; i < ITEM_COUNT; i++) {
        sema_wait(&empty_buffer1_sema);
        sema_wait(&buffer1_mutex_sema);
        item = i + 'a';
        put_item(item,&pIn,buffer1);
        sema_signal(&buffer1_mutex_sema);
        sema_signal(&full_buffer1_sema);
        printf("produce item: %c\n", item);
    }
}
コード例 #2
0
ファイル: pc2.c プロジェクト: huaguang/OS_CD
void *consume(void *arg)
{
    int i;
    int item;

    for (i = 0; i < ITEM_COUNT; i++) {
        sema_wait(&full_buffer2_sema);
		sema_wait(&buffer2_mutex_sema);
        item = get_item(&conOut,buffer2); 
		sema_signal(&buffer2_mutex_sema);
        sema_signal(&empty_buffer2_sema);
        printf("          consume item: %c\n", item);
    }
}
コード例 #3
0
void FLMAPI f_semSignal(
	F_SEM			hSem)
{
#if defined( FLM_SOLARIS)
	sema_post( (sema_t *)hSem);
#else
	sema_signal( (sema_t *)hSem);
#endif
}
コード例 #4
0
ファイル: ring_3.c プロジェクト: huaguang/OS_CD
void* ring(void*arg){
	int *id;
	int content;
	id=(int*)arg;
	char flag=0;// is my mail?
	int circle=circleCount;
	while(circle>0){
		sema_wait(&read_sema);
		if(readCount==0)
			sema_wait(&write_sema);
		readCount++;
		sema_signal(&read_sema);
		if(*id==((mailBox[0]-1)%N+1)){
			flag=1;
			content=mailBox[1];
		}
		sema_wait(&read_sema);
		readCount--;
		if(readCount==0) 
			sema_signal(&write_sema);
		sema_signal(&read_sema);
		if(flag==1){
			sema_wait(&write_sema);
			mailBox[0]=*id+1;
			mailBox[1]=content+1;
			sema_signal(&write_sema);
			int i;
		/*	for(i=0;i<*id-1;i++)
				printf("\t");
			printf("this is thread_%d:Receive:%d;Send:%d\n",*id,content,content+1);

		*/
			assert(*id==content%N+1);

			flag=0;
			circle--;
		//	if(circle%10==0)
		//		printf("%d\n",circle);
		}
		else{
			usleep(sleepTime);
		}
	}
}
コード例 #5
0
ファイル: pc2.c プロジェクト: huaguang/OS_CD
void *calculate(void *arg)
{
    int i;
    int item;
    for (i = 0; i < ITEM_COUNT; i++) {
        sema_wait(&full_buffer1_sema);
        sema_wait(&buffer1_mutex_sema);
        item = get_item(&calOut,buffer1); 
        sema_signal(&buffer1_mutex_sema);
        sema_signal(&empty_buffer1_sema);
		item=item+'A'-'a';
        sema_wait(&empty_buffer2_sema);
        sema_wait(&buffer2_mutex_sema);
        put_item(item,&calIn,buffer2); 
        sema_signal(&buffer2_mutex_sema);
        sema_signal(&full_buffer2_sema);
        printf("    calculate item: %c\n", item);
    }
}
コード例 #6
0
ファイル: test_monkey.c プロジェクト: yliu075/xv6_lab2
void monkey(void* m) {
    int num = (int)m;
    while(dominantMonkey != 0){}
    sema_acquire(tree);
    //printf(1,"Monkey acq Count: %d\n", tree->count);
    printf(1,"Monkey #%d UP\n", num);
    int i = 0;
    int coconutTimer = random(99999) + 500000;
    for(;i < coconutTimer; i++){}
    printf(1,"Monkey $%d DOWN\n",num);
    sema_signal(tree);
    //printf(1,"Monkey sig Count: %d\n", tree->count);
    texit();
}
コード例 #7
0
ファイル: test_monkey.c プロジェクト: yliu075/xv6_lab2
void dmonkey(void* m) {
    dominantMonkey++;
    sema_acquire(tree);
    //printf(1,"Monkey acq Count: %d\n", tree->count);
    printf(1,"Dominant Monkey UP\n");
    int i = 0;
    int coconutTimer = random(99999) + 500000;
    for(;i < coconutTimer; i++){}
    printf(1,"Dominant Monkey DOWN\n");
    sema_signal(tree);
    dominantMonkey--;
    //printf(1,"Monkey sig Count: %d\n", tree->count);
    texit();
}