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

Deadlock и racecondition проверить код - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Каким образом реализуется квалификатор const? http://www.cyberforum.ru/cpp-beginners/thread1230979.html
Каким образом реализуется квалификатор const? Хранится ли в памяти в процессе выполнения программы какая либо информация по этому поводу(например что данные константны)?
C++ Автоматическое добавление dll в проект при сборке в CodeBlocks и Eclipse CDT Хочу, чтобы при сборке необходимые библиотеки автоматически помещались в директорию с скомпилированным исполняемым файлом. Как это сделать в Code::Blocks и Eclipse CDT, если это вообще возможно? http://www.cyberforum.ru/cpp-beginners/thread1230961.html
C++ Сформировать массив содержащий количество денежных знаков на указанную сумму
Заданы значения элементов двух целочисленных массивов и некоторое число. Первый массив содержит номиналы денежных знаков (по убыванию), а второй - их количество в касс. Сформировать массив содержащий количества денежных знаков необходимых для выдачи из кассы указанной суммы. Вывести этот массив или сообщение поясняющее причину невозможности выдачи указанной суммы. Размер массивов не более 10....
C++ Вывод wstring в файл
bool addCategory(const std::wstring& name_category) { wfstream fio = initAndCheckWFSTREAM(FILENAME_CATEGORY, ios_base::app | ios_base::out); // инициализация fio (своя функция с некоторыми особенностями) if (isFileEmpty(FILENAME_CATEGORY)) fio << ":\n"; fio << name_category << "\n"; return true;
C++ Debug Assertion Failed http://www.cyberforum.ru/cpp-beginners/thread1230894.html
Ошибка. Не могу понять что не так. Как я понял с дебагера, проблема во втором освобождении памяти. Вообщем хелп ми) // hw_3.cpp : Defines the entry point for the console application. // Пользователь вводит строки пока не надоест #include "stdafx.h" #include <iostream> #include <iomanip>
C++ Где найти описание типа IHTMLWindow7? Здравствуйте, у меня такая проблема - есть IWebBrowser2 и я могу подтягивать без проблем любые интерфейсы из http://msdn.microsoft.com/en-us/library/hh801967(v=vs.85).aspx кроме (IHTMLWindow7 http://msdn.microsoft.com/en-us/library/ff975210(v=vs.85).aspx) он даже не описан в Mshtml.h - в чем может быть проблема ? Если кого не затруднит посмотрите у себя в фале C:\Program Files\Microsoft... подробнее

Показать сообщение отдельно
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
22.07.2014, 20:04  [ТС]     Deadlock и racecondition проверить код
Без разницы.
С _condition нужно обращаться специальным образом.
Например, в Visual C++ ее достаточно сделать volatile, это заставит
компилятор каждый раз при обращении программы к переменной
перечитывать ее из памяти.
спасибо большое...сразу не подумал бы...)

Добавлено через 1 минуту
а еще у меня цитаты не взлетают почему-то...(

Добавлено через 11 минут
если кому-то интересно про volatile, то алена c++ неплохо показала пример, один в один как у меня...)
Компилятор скорее всего оптимизирует код вроде такого, если переменная cancel не менялась в теле цикла.


bool cancel = false;
while( !cancel ) {
;
}

Если cancel не меняется, то ее и проверять каждый раз незачем, компилятор и не будет ее проверять.

Зато если вы укажете перед переменной volatile, то оптимизиации не будет. Предполагается, что переменная cancel могла измениться каким-то волшебным образом.

volatile bool cancel = false;
while( !cancel ) {
;
}
Добавлено через 6 минут
еще довольно важный момент, который я проморгал
C++
1
2
3
4
5
6
7
8
std::async(std::launch::async, [this]
        {
            while(_condition)
            {
                std::thread t(&gthread::invoker, this);
                t.join();
            }
        });
если std::async в параметрах не указать std::launch::async, то она будет запускать потоки на свое усмотрение(некоторые с lazy init)

Добавлено через 24 минуты
пока класс находится в таком состоянии...интересны еще мнения...)

заголовок
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
#include <thread>
#include <future>
 
class gthread
{
    typedef void        (*pFunc) ();
 
public:
    gthread(pFunc func, unsigned short int threadNumber): 
    _func               (func), 
    _threadNumber       (threadNumber),
    _threadCounter      (0),
    _breakTime          (breakTime),
    _condition          (true)  {}
    void start();
    void stop();
 
private:
    pFunc               _func;
    unsigned short int  _threadCounter;
    unsigned short int  _threadNumber;
    volatile bool       _condition;
    void invoker();
    void abuse();
};
код
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 "gthread.h"
 
void gthread::start()
{
    std::thread abuser(&gthread::abuse, this);
    abuser.detach();
}
 
void gthread::stop()
{
    _condition = false;
}
 
void gthread::invoker()
{
    (_func)();
}
 
 
void gthread::abuse()
{
    while(_threadCounter<_threadNumber) 
    {
        _threadCounter++;
        std::async(std::launch::async, [this]
        {
            while(_condition)
            {
                std::thread t(&gthread::invoker, this);
                t.join();
            }
        });
    }
}
Добавлено через 20 часов 15 минут
ап...)
 
Текущее время: 15:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru