я создал код для проекта UNIX с использованием semaphores.My кода заключается в следующем:независимого выполнения процессов с семафорами
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/mman.h>
#include "display.h"
#include <semaphore.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct {
sem_t p1;
sem_t p2;
}SemPair ;
int main (int argc, char *argv[]) {
SemPair *sem = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED |MAP_ANONYMOUS , -1, 0);
int i=0;
sem_init(&(sem->p1),1,0);
sem_init(&(sem->p2),1,0);
pid_t pid = fork();
if (!pid)
{
for(i=0;i<10;i++) {
sem_wait(&(sem->p2));
display("Hello world\n");
sem_post(&(sem->p1)); }
}
else
{
for(i=0;i<10;i++) {
sem_post(&(sem->p2));
sem_wait(&(sem->p1));
display("Goodnight world\n");
sleep(1);}
}
sem_destroy(&(sem->p1));
sem_destroy(&(sem->p2));
return 0;
}
Как вы можете видеть, моя проблема заключается в том, что я не хочу получить дисплей по порядку один за другим, но скорее случайным образом. Итак, мой вывод - это.
Hello world
Goodnight world
Hello world
Goodnight world
Hello world
Goodnight world
....
Вместо этого я хочу, чтобы процессы не выполняются в порядке, поэтому вывод будет что-то вроде этого:
Hello world
Hello world
Hello world
Goodnight world
Hello world
Goodnight world
Goodnight world
....
Вы должны изучить [правильное форматирование C] (// prohackr112.tk/r/proper-c-formatting). Или узнайте, как [полностью обфускать свой код] (// prohackr112.tk/r/proper-c-obfuscation). –
Посмотрите, что семафор ждет, когда и для чего. –