Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //head.h
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/sem.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/shm.h>
- #include <sys/wait.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <string.h>
- #define CHECK(d, str) \
- { \
- if ((d) == -1) { \
- perror(str); \
- return -1; \
- } \
- }
- typedef struct Data {
- int is_asleep;
- int n;
- int end;
- } Data;
- struct sembuf V[5] = {{0, 1, 0}, {1, 1, 0}, {2, 1, 0}, {3, 1, 0}, {4, 1, 0}};
- struct sembuf P[5] = {{0, -1, 0}, {1, -1, 0}, {2, -1, 0}, {3, -1, 0}, {4, -1, 0}};
- struct sembuf Z = {4, 0, 0};
- int N = 5;
- //master.c
- #include "head.h"
- int main() {
- key_t key = ftok("./master.c", atoi("1234"));
- CHECK(key, "ftok");
- int id = semget(key, 5, IPC_CREAT | 0644); //mutex, service, sleep, diagnostics
- CHECK(id, "semget");
- CHECK(semctl(id, 0, SETVAL, 1), "semctl");
- CHECK(semctl(id, 1, SETVAL, 1), "semctl");
- CHECK(semctl(id, 2, SETVAL, 0), "semctl");
- CHECK(semctl(id, 3, SETVAL, 0), "semctl");
- CHECK(semctl(id, 4, SETVAL, 20), "semctl");
- int id1 = shmget(key, sizeof(Data), IPC_CREAT | 0644);
- CHECK(id1, "shmget");
- Data* data = (Data*)shmat(id1,0,0);
- CHECK(*((int*) data), "shmat");
- data->n = 0;
- data->is_asleep = 1;
- data->end = 0;
- printf("МАСТЕР: Гатов))\n");
- while(1) {
- if (data->end)
- break;
- if (data->is_asleep) {
- CHECK(semop(id, &P[2], 1), "semop");
- data->is_asleep = 0;
- printf("МАСТЕР: Проснулся улыбнулся\n");
- }
- printf("МАСТЕР: Ща как проведу диагностику *агресия*\n");
- CHECK(semop(id, &V[3], 1), "semop");
- printf("МАСТЕР: Провел, ща занесу в БД *кукурузка*\n");
- CHECK(semop(id, &P[0], 1), "semop");
- if (--data->n) {
- printf("МАСТЕР: Зевнул)0\n");
- data->is_asleep = 1;
- }
- printf("МАСТЕР: Минус раз ты пидарас\n");
- CHECK(semop(id, &V[0], 1), "semop");
- }
- //CHECK(semctl(id, 0, IPC_RMID), "semctl");
- //CHECK(shmctl(id1, IPC_RMID, NULL), "shmctl");
- return 0;
- }
- //taxis.c
- #include "head.h"
- int main() {
- key_t key = ftok("./master.c", atoi("1234"));
- CHECK(key, "ftok");
- int id = semget(key, 5, 0); //mutex, service, sleep, diagnostics
- CHECK(id, "semget");
- int id1 = shmget(key, sizeof(Data), 0);
- CHECK(id1, "shmget");
- Data* data = (Data*)shmat(id1,0,0);
- CHECK(*((int*) data), "shmat");
- printf("ДИСПЕЧЕРСКАЯ: Хахаоченьсмешно!! Ща начнем спамить тачамбами\n");
- for(int i = 0; i < 20; ++i) {
- switch(fork()) {
- case -1:
- printf("Err пизда\n");
- exit(1);
- case 0: {
- printf("ТАЧКА НОМЕР %d: ЕБАТЬ ПОЕХАЛИ!!!\n", getpid());
- CHECK(semop(id, &P[0], 1), "semop");
- if (data->n == N) {
- CHECK(semop(id, &V[0], 1), "semop");
- printf("ТАЧКА НОМЕР %d: Мест нет:(\n", getpid());
- CHECK(semop(id, &P[4], 1), "semop");
- exit(0);
- }
- ++data->n;
- CHECK(semop(id, &V[0], 1), "semop");
- printf("ТАЧКА НОМЕР %d: Ждём качественного сервисa:)\n", getpid());
- CHECK(semop(id, &P[1], 1), "semop");
- if (data->is_asleep) {
- semop(id, &V[2], 1);
- printf("ТАЧКА НОМЕР %d: Разбудили пидараса:)))\n", getpid());
- }
- printf("ТАЧКА НОМЕР %d: Оплатили аэроподсом\n", getpid());
- CHECK(semop(id, &P[3], 1), "semop");
- CHECK(semop(id, &V[1], 1), "semop");
- printf("ТАЧКА НОМЕР %d: Хелло дартнес май олд френд(Гудбай мазерфакерс\n", getpid());
- CHECK(semop(id, &P[4], 1), "semop");
- exit(0);
- }
- default:
- continue;
- }
- }
- //CHECK(semop(id, &Z, 1), "semop");
- //data->end = 1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement