2010-10-14 91 views
0

我需要创建6个线程同时执行任务(增加/减少数字),直到整数变为0.我应该只使用UNIX命令(管道是具体的),我我不知道管道是如何工作的,或者我怎样才能实现这个程序。使用UNIX管道与C

这个整数可以存储在一个文本文件中。

我真的很感激,如果任何人都可以解释如何执行这一方案

+2

这个功课? – anthony 2010-10-14 01:18:31

+0

我不清楚你是指bash脚本还是一个真正的C程序来完成这项工作。 – karlphillip 2010-10-14 01:19:16

+0

实际C程序。 – Gootik 2010-10-14 01:20:32

回答

1

书是正确的,管道可用于保护重要的部分,但如何做到这一点是不obvous。

int *make_pipe_semaphore(int initial_count) 
{ 
    int *ptr = malloc(2 * sizeof(int)); 
    if (pipe(ptr)) { 
     free(ptr); 
     return NULL; 
    } 
    while (initial_count--) 
     pipe_release(ptr); 
    return ptr; 
} 

void free_pipe_semaphore(int *sem) 
{ 
    close(sem[0]); 
    close(sem[1]); 
    free(sem); 
} 

void pipe_wait(int *sem) 
{ 
    char x; 
    read(sem[0], &x, 1); 
} 

void pipe_release(int *sem) 
{ 
    char x; 
    write(sem[1], &x, 1); 
} 

在信号量的最大可用资源从OS变化到OS但通常为至少4096。这不用于保护的一个关键部分,其中初始值和最大值都为1

无关紧要用法:

/* Initialization section */ 
int *sem = make_pipe_semaphore(1); 



/* critical worker */ 
{ 
    pipe_wait(sem); 
    /* do work */ 

    /* end critical section */ 
    pipe_release(sem); 
}