小编eev*_*e25的帖子

使用 5 个信号量和进程打印数字 1 到 100

我有一个作业,用 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)

c linux semaphore

5
推荐指数
1
解决办法
2112
查看次数

标签 统计

c ×1

linux ×1

semaphore ×1