我需要创建6个线程来同时执行一个任务(递增/递减一个数字),直到整数变为0。我应该只使用UNIX命令(具体来说是管道),我无法理解管道的工作方式,或者我如何实现此程序。
该整数可以存储在文本文件中。
如果有人可以解释如何实施此程序,我将不胜感激
最佳答案
这本书是正确的,尽管可以用管道保护关键部分,但如何做并不容易。
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);
}
信号量中的最大可用资源因操作系统而异,但通常至少为4096。这对于保护初始值和最大值均为1的关键部分并不重要。
用法:
/* Initialization section */
int *sem = make_pipe_semaphore(1);
/* critical worker */
{
pipe_wait(sem);
/* do work */
/* end critical section */
pipe_release(sem);
}
关于c - 结合使用UNIX Pipeline和C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3929365/