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

Мьютексы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задано две матрицы http://www.cyberforum.ru/cpp-beginners/thread377229.html
найти АхВ результат скалярно умноженых матриц оформить как функцию на фото матрицы А и В
C++ Найти те числа последовательности, которые при делений на 7 дают остаток 1,2 или 5 1)Даны натуральные числа n,q1....qn.Найти те числа q1 последовательности q1...qn которые при делений на 7 дают остаток 1,2 или 5. 2)while Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления. 3)while Дано целое число N (> 0). С помощью операций деления нацело и взя- тия... http://www.cyberforum.ru/cpp-beginners/thread377226.html
C++ Динамическая область памяти функции new
Чистый Си У кого есть варианты с пояснениями Написать пользовательскую функцию, решающую указанную ниже задачу. Массив создается в динамической области памяти функцией new. При обращении к элементам массива воспользоваться взаимосвязью массивов с указателями (косвенная адресация). Предусмотреть реакцию программы на ситуации, при которых задача не имеет решения. В одномерном массиве,...
C++ Игра "угадайка" с использованием do while. Ошибка.
Собственно задача: Написать программу, играющую с пользователем в "угадайку" - пользователь загадывает число, компьютер пытается его отгадать. Компьютер называет свои варианты, а пользователь отвечает лишь "больше" либо "меньше". Вот прога: #include <iostream> #include <conio.h> using namespace std;
C++ Функция rand() http://www.cyberforum.ru/cpp-beginners/thread377197.html
Добрый день. Написал следующую функцию: #include <iostream> #include <stdlib.h> using namespace std; int main (int argc, char*argv) { int x = 0, count = 0; while (count != 10) {
C++ Динамические структуры данных С/С++ Помогите создать программу на С/С++ для реализации списка, стека и очереди. подробнее

Показать сообщение отдельно
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
03.11.2011, 15:10     Мьютексы
Здравствуйте..
У Меня задача синхронизовать потоки,которые "делят "между собой какой-нибудь ресурс.
Допустим проходят массив от 0 -10.
то есть есть рандомная очередь из 2-х потоков..например 121122 где 1 -это первый поток а 2-второй соответственно..
и пока 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
#include <Windows.h>
#include <iostream>
#include <process.h>
using namespace std;
 
char mass[10];
DWORD ThreadId;
HANDLE hMutex;
DWORD dwWaitResult;
void left_to();//переход справа налево
void right_to();//переход слева направо
bool write_way(int way);
int queue[5];
 
int main()
{
    int res=0;
    bool move;
    hMutex = CreateMutex( NULL, FALSE, NULL);
    int i=0;
    for(i=0;i<=4;i++)
    {
        int a = rand() % 10;//выбираем рандомно в какую сторону начнется движение
        queue[i]=a;
    }
    move = write_way(queue[i]);
 
        /*if(queue[i]==1)//если =1 то допускаем движение влево
        {
            
            HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)left_to, 0, 0, &ThreadId);
        }else if (queue[i]==2)
        {   //иначе движение вправо
            HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)right_to, 0, 0, &ThreadId);
        }*/
    return 1;
}
 
bool write_way(int way)
{
    dwWaitResult = WaitForSingleObject( hMutex, 5000L);
    if (dwWaitResult == WAIT_TIMEOUT) // Таймаут. Мьютекс за это время не освободился.
    {
        return 0;
    }
    else // Мьютекс освободился, и наш поток его занял. Можно работать.
    {
        if (way==1)
        {
            HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)left_to, 0, 0, &ThreadId);
        }else if (way==2)
        {
            HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)right_to, 0, 0, &ThreadId);
        }
        ReleaseMutex(hMutex); // Освобождаем мьютекс.
    }
}
void left_to()
{
 
}
void right_to()
{
 
}
Буду рад если предложите свою идею насчет ресурса который делят..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru