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

Некорректная работа условных переменных в приведенном коде - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В файл записывается мусор. Подкорректировать код http://www.cyberforum.ru/cpp-beginners/thread1085876.html
Нужна помощь! В общем организована БД со структурами и целый перечень функций, которые её обслуживают. Всё работало, но что как-то пошло не так и теперь некорректно работает 4-ая функция: "Edit data". Находит, принимает, но после перезаписи затирает ёё мусором. Что интересно при редактировании 1-ой структуры - редактирует правильно саму структуру, но все остальное превращается в мусор. При...
C++ Лишняя скобка? Ругается на строку str = L"всё"; Так- error C2059: синтаксическая ошибка: ] \wchar\wchar\wchar.cpp 11 #include <iostream> #include "Vjnkak.cpp" int main() { int baitovwchar_t = sizeof(wchar_t); wchar_t str = L"tanya"; // Зачем и что L ????? std::cout << str; http://www.cyberforum.ru/cpp-beginners/thread1085874.html
C++ численное решения уравнения фредгольма второго рода
Подскажите,обсуждалось ли на форуме численное решение уравнения фредгольма второго рода?может у кого есть реализация метода последовательных приближений на си?
Используя интерполяционную формулу Ньютона, вычислить значение функции при заданных значениях аргумента с точностью до 0.001 C++
Нужно написать програму которая будит используя интерполяционную формулу Ньютона вычеслять значение функции. Задание: Значение аргумента: х1=1.4161; x2=1.4625; x3=1.4135; x4=1.470. Таблица значений: x: 1.415, 1.420, 1.425, 1.430, 1.435, 1.440, 1.445, 1.450, 1.455, 1.460, 1.465.
C++ Вывести на экраны все книги указанного автора http://www.cyberforum.ru/cpp-beginners/thread1085864.html
Дан список, содержащий данные о книгах - фамилия автора и название книги. Вывести на экраны все книги указанного автора. Помогите, хотя бы пример напишите
C++ Обращение к классу в статической библиотеке из консольного приложения. С++ По условию в решении 2 проекта: статическая библиотека и консольное приложение. В статической библиотеке я прописал класс Queue т.е. все его методы и его класс-наследователь Queue1. Мне нужно обратиться из консольного приложения к Queue. Подскажите, пожалуйста, как это сделать. подробнее

Показать сообщение отдельно
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 468
Завершенные тесты: 1
31.01.2014, 00:24     Некорректная работа условных переменных в приведенном коде
хай всем!)начал недавно изучать многопоточность,а именно работу с ней с помощью стандартной библиотеки C++.Дошел до условных переменных, и сразу же решил написать маленький примерчик, чтобы все это закрепить как говорится)Но тут же столкнулся с проблемой...
Короче вот то что я придумал: Есть два потока(один из них является главным потоком main()).Второй поток,после его запуска начинает рандомно получать числа 0 или 1 и отправлять главному потоку сигнал о получении числа.В главном потоке с помощью условных переменных стоит условие,что если второй поток срандомил число 1,то мы пробуждаем главный поток,и на экран выводим букву 'а'.Вот и все,собственно все скромно и легко.Вот мой код:
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
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
 
mutex m;
condition_variable var;
int n;
 
void threadfun()
{
while(true)
{
unique_lock<mutex> lock(m);
n = rand() % 2;
cout << n;
var.notify_one();
lock.unlock();
}
}
 
void main()
{
thread th(threadfun);
th.detach();
while(true)
{
unique_lock<mutex> lock(m);
var.wait(lock,[] {if(n == 1) return true; else return false;});
cout<< "a";
lock.unlock();
}
}
Результат кода должен быть:
001а1а01а1а1а00...
То есть если есть 1,то за ней сразу 'а'
А у меня почему то вот тпк выводит:
1а1а001а11а01а1а000111а001а...
То есть иногда пропускается 1,а из этого следует что сигнал о поступившем числе не правильно передается в главный поток.И еще...зачем вообще мьютекс нужен в условных переменных?я читаю книгу и не понимаю зачем они его там используют,я сделал по аналогии
Помогите разобраться пожалуйста!желательно с объяснениями
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru