Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/27: Рейтинг темы: голосов - 27, средняя оценка - 4.67
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295

Синхронизация процессов при помощи мьютексов

13.11.2009, 10:58. Показов 5806. Ответов 24

Студворк — интернет-сервис помощи студентам
начал разбираться с мбютексами, а точнее как синхронизировать 2 рпоцесса с их помощью.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdlib.h>
#include <semaphore.h>
#include <pthread.h>
#include <string.h>
 
pthread_mutex_t work_mutex;
 
pid_t makeproc(void)
{
    pid_t pid;
 
    if((pid = fork())<0)
    {
       printf("fork faled\n");
       exit(1);
    }
    else return pid;
}
int my_mutex_init(void)
{
    int res;
    res = pthread_mutex_init(&work_mutex, NULL);
    if(res != 0)
    {
        printf("Mutex init falled!\n");
        exit(1);
    }
    else return res;
}
 
int main(void)
{
    pid_t pid;
    int res, iLenStr;
 
    res = my_mutex_init();
 
    pid = makeproc();
 
       switch(pid)
    {
        case 0:
        {
            pthread_mutex_lock(&work_mutex);
 
            printf("this is a child\n");
            sleep(20);
 
            printf("lock child - finish\n");
        
            pthread_mutex_unlock(&work_mutex);
 
 
        }break;
 
        default:
        {
 
            sleep(2);
            pthread_mutex_lock(&work_mutex);
 
            printf("this is a parent\n");
            sleep(10);
 
            printf("lock parent - finish\n");         
 
            pthread_mutex_unlock(&work_mutex);
 
        }break;
    }
 
 
 
}
Добавлено через 1 минуту
по идее, чайлд процес должен залочить мьютекс первым и подождав 20 сек вывести сообщение что он разлочился. потом лочит перент, ждет 10 и выводит что он тоже.

результат - не лочит никто. что я неправильно сделал?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.11.2009, 10:58
Ответы с готовыми решениями:

синхронизация процессов с использованием мьютексов
помогите, не могу найти информацию для работы с мьютексами для синхронизации процессов

помогите .пожалуйста при помощи ЦИКЛИЧЕСКИХ ПРОЦЕССОВ
Кинетическая энергия движущегося тела W=m*v2/2, где m - масса тела, v - его скорость. Составить алгоритм для получения зависимости W от...

Синхронизация процессов
Добрый день! Прошу помощи в следующем вопросе: Есть некое консольное приложение на C#, которое производит работу с двумя файлами...

24
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
02.12.2009, 22:40
Студворк — интернет-сервис помощи студентам
Вряд ли конечно, но попробуй загрузиться в LiveCD и там скомпилировать этот пример.
У меня на VBox тоже стоит бубунта 9.10 и в ней все верно запускается.
1
 Аватар для Sergeymd
0 / 0 / 1
Регистрация: 13.09.2009
Сообщений: 45
02.12.2009, 22:59
да но на livecd как скомпилить коде блокса нету, консоль я не помню)

ps: к сати у меня версия 9.04 а тот же самый код у знакомого на версии 8.04 компилируется
думаю сейчас другую убунту поставить
0
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
02.12.2009, 23:01
Цитата Сообщение от Sergeymd Посмотреть сообщение
да но на livecd как скомпилить коде блокса нету, консоль я не помню)
Bash
1
gcc -o proga proga.c
1
 Аватар для Sergeymd
0 / 0 / 1
Регистрация: 13.09.2009
Сообщений: 45
02.12.2009, 23:27
проблема в Сode Blocks в консоле нормально компилит
0
 Аватар для Sergeymd
0 / 0 / 1
Регистрация: 13.09.2009
Сообщений: 45
03.12.2009, 17:08
у меня что то не получается за синхронизировать 4 процесса, тоесть я хочу чтобы выводила 1,2,3,4
оно выводит 3,1,2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/types.h>
 
#define KEY 1147
#define KEY2 1148
#define KEY3 1149
 
 
int main(void)
{
  pid_t a;
  pid_t b;  
  int semid,semid2,semid3;
  struct sembuf sem_wait[2] = { {0, -1, 0}, {0, 1, 0} };
  struct sembuf sem_wait2[2] = { {0, -1, 0}, {0, 1, 0} };
  struct sembuf sem_wait3[2] = { {0, -1, 0}, {0, 1, 0} };
 
 if( (semid = semget(KEY, 2, 0666 | IPC_CREAT))   < 0)
  {
     perror("semget");
     return -1;
  }
   if( (semid2 = semget(KEY2, 2, 0666 | IPC_CREAT))   < 0)
  {
     perror("semget");
     return -1;
  }
  
  if( (semid3 = semget(KEY3, 2, 0666 | IPC_CREAT))   < 0)
  {
     perror("semget");
     return -1;
  }
 
  if( (a = fork()) && (b = fork())< 0)
  {
    perror("fork");
    return -1;
  }
 
 
//-------------------------------------------
  if(a==0 && b>0)
  { 
    semop(semid2, &sem_wait2[0], 1);
    printf("3\n");    
    semop(semid3, &sem_wait3[1], 1);               
  }
  if(a==0 && b==0)
  {        
    semop(semid3, &sem_wait3[0], 1);
    printf("4\n"); 
   }
  if(a>0 && b==0)
  {        
    semop(semid, &sem_wait[0], 1);
    printf("2\n");
    semop(semid2, &sem_wait2[1], 1);
  }
  if(a> 0 && b> 0)
  {                       
    printf("1\n");
    semop(semid, &sem_wait[1], 1);
  }
 
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2009, 17:08

СИнхронизация процессов
Всем привет. Имеется несколько вопросов про синхронизацию процессов. - Что вобще такое &quot;синхронизация процессов&quot;?? С потоками...

Синхронизация процессов
Здравствуйте , помогите с синхронизацией процессов. Нужно создать 2 процесса дочерних и читать файл по 10 символов в течении 10 секунд либо...

Синхронизация процессов
какие существуют простые способы синхронизации процессов? из личного опыта, пожалуйста.

Синхронизация процессов
Добрый день уважаемые форумчане. Если ошибся разделом - поправьте. Вкратце опишу проблему. Есть терминальный сервер и некая...

Синхронизация процессов
Добрый вечер, форумчане! Имеется такая задача: Исходный процесс создает два программных информационных канала К1 и К2, канал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru