我有一个作业,用 c 语言编写一个程序,将数字 1 - 100 打印到 shell。我必须使用 5 个进程。第一个将打印 1、6、11、16...第二个将打印 2、7、12、17...等等。我需要创建 5 个信号量来同步这些进程。五个信号量需要初始化为0、1、2、3、4。
这是否意味着我需要使用semctl?
另外,据说打印 1 的进程必须用 4 初始化,打印 2 的进程必须用 3 初始化,依此类推。
我该如何执行此操作?
最后据说在打印一个数字之前我需要执行4次wait来将信号量值减4,而在打印数字之后我需要使用signal将其他信号量值加1。
我尝试了很多方法,但无法解决。我不明白这些进程之间的时间安排 - 如何使每个进程使用特定的信号量?稍后如何“返回”该进程,而不在我已有的子进程中创建子进程?
这是我能实现的最大目标:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void increaseallbutI(int i);
void cleanup();
int semid;
struct sembuf sops[1];
union semun
{
int val;
struct semid_ds * buff;
unsigned short *array;
struct seminfo *_buf;
};
union semun semarg;
void main()
{
int i, j, k, …Run Code Online (Sandbox Code Playgroud)