Форум программистов, компьютерный форум CyberForum.ru

Мьютексы, семафоры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 92, средняя оценка - 4.62
lexatigr
0 / 0 / 0
Регистрация: 16.12.2010
Сообщений: 76
02.01.2012, 14:57     Мьютексы, семафоры #1
Здравствуйте.
Помогите пожалуйста, хочу найти примеры задач с использованием мьютексов, семафоров, потоков.
А то надо решить задачу, вроде все делаю по шаблону, а не работает.
Миниатюры
Мьютексы, семафоры  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2012, 14:57     Мьютексы, семафоры
Посмотрите здесь:

C++ Семафоры(7 потоков)
C++ Мьютексы
Семафоры C++
C++ что такое семафоры?
C++ Объекты синхронизации. мьютексы, семафоры
Семафоры - можно ли считать ноль положительным числом? C++
Понятие синхронизации потоков и процессов. Семафоры и мьютексы C++
Потоки в windows и семафоры C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
02.01.2012, 15:36     Мьютексы, семафоры #2
Почитайте в вики что такое семафор и как его используют, потом посмотрите мой пример (просто код моей лабораторной, у меня под WINAPI было банально хоть что-то сделать с семафором, для линукса там было поинтереснее, но несмотря на всю схожесть код всё же немного будет отличаться так что те примеры не привожу).
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
#include <iostream>
#include <string>
#include <windows.h>
#include <process.h>
using namespace std;
 
string someString;
HANDLE m_hSemaphore; // Семафор для учета элементов очереди
 
unsigned __stdcall ReadFunc( void * arg)
{
    WaitForSingleObject(m_hSemaphore,INFINITE);
        cout<<"\nЯ тред 1 и я запустился потому что тред 2 изменил значение семафора.\nЗначение что было введено в треде 2:"<<someString<<"\n";
}
 
unsigned __stdcall WriteFunc( void * arg)
{
    cout<<"Я тред 2, введите какой-то текст:";
    cin>>someString;
    ReleaseSemaphore(m_hSemaphore,1, NULL); // Увеличиваем счетчик семафора на 1.
}
 
 
int main()
{
     SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    m_hSemaphore = CreateSemaphore(NULL, 0, 1000, NULL);    //начальное значение счетчика = 0
    unsigned uThreadIDs[2];
    HANDLE hThreads[2];
    hThreads[0] = (HANDLE)_beginthreadex( NULL, 0, &ReadFunc, NULL, 0,&uThreadIDs[0]);
    hThreads[1] = (HANDLE)_beginthreadex( NULL, 0, &WriteFunc, NULL, 0,&uThreadIDs[1]);
 
    WaitForMultipleObjects(2, hThreads, TRUE, INFINITE ); // без тайм-аута
    CloseHandle( m_hSemaphore);
    CloseHandle( hThreads[0] );
    CloseHandle( hThreads[1] );
    return 0;
}
Думаю дальше вам будет понятно как реализовать ваше задание.
lexatigr
0 / 0 / 0
Регистрация: 16.12.2010
Сообщений: 76
02.01.2012, 15:42  [ТС]     Мьютексы, семафоры #3
Спасибо огромное. Буду разбираться

Добавлено через 2 минуты
Gepar, спасибо огромное.
Yandex
Объявления
02.01.2012, 15:42     Мьютексы, семафоры
Ответ Создать тему
Опции темы

Текущее время: 08:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru