thread safe functions
От: Аноним  
Дата: 27.04.10 09:16
Оценка:
Доброго всем времени суток.
Возник такой вопрос. В C++ есть ключевое слово const. Для параметров и методов оно означает, грубо говоря, что внутри метода нельзя вызывать не константные методы для this и нельзя меня константные параметры. А можно ли придумать что-то похожее, но для пометки методов и функций, которые могут работать параллельно. Может есть какая-то тулза, которая проверяет C++ код и выдает ошибки, если из какой-то "многопоточной" функции вызывается не многопоточная. Конечно же, там должна быть какая-то штука, которая говорит, что кусок кода внутри многопоточной функции стал однопоточным (поставили критическую секцию и т.п.).
Re: thread safe functions
От: kvasya  
Дата: 27.04.10 09:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго всем времени суток.

А> Возник такой вопрос. В C++ есть ключевое слово const. Для параметров и методов оно означает, грубо говоря, что внутри метода нельзя вызывать не константные методы для this и нельзя меня константные параметры. А можно ли придумать что-то похожее, но для пометки методов и функций, которые могут работать параллельно. Может есть какая-то тулза, которая проверяет C++ код и выдает ошибки, если из какой-то "многопоточной" функции вызывается не многопоточная. Конечно же, там должна быть какая-то штука, которая говорит, что кусок кода внутри многопоточной функции стал однопоточным (поставили критическую секцию и т.п.).

Как вы себе это представляете?
Но думаю openMp это очень близко
Re: thread safe functions
От: remark Россия http://www.1024cores.net/
Дата: 27.04.10 09:19
Оценка: 4 (1)
Здравствуйте, Аноним, Вы писали:

А>Доброго всем времени суток.

А> Возник такой вопрос. В C++ есть ключевое слово const. Для параметров и методов оно означает, грубо говоря, что внутри метода нельзя вызывать не константные методы для this и нельзя меня константные параметры. А можно ли придумать что-то похожее, но для пометки методов и функций, которые могут работать параллельно. Может есть какая-то тулза, которая проверяет C++ код и выдает ошибки, если из какой-то "многопоточной" функции вызывается не многопоточная. Конечно же, там должна быть какая-то штука, которая говорит, что кусок кода внутри многопоточной функции стал однопоточным (поставили критическую секцию и т.п.).

Можешь попробовать Red Code / Green Code от Мейерса:
http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!207.entry?wa=wsignin1.0&sa=1193864
Нет, до славы Александреску ему не дотянуться


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: thread safe functions
От: Аноним  
Дата: 27.04.10 09:46
Оценка:
Здравствуйте, kvasya, Вы писали:

K>Как вы себе это представляете?

K>Но думаю openMp это очень близко

Я это себе представляю примерно так:

class A
{
    void DoSmth(int param) [multithreaded]
    {
        bla-bla-bla
        if (CheckSmth())
            bla-bla-bla
    }

    bool CheckSmth() [multithreaded]
    {
        bla-bla-bla
        PreapareSmth(); // ошибка!!!
    }

    void PrepareSmth()
    {
        bla-bla-bla
    }
};


после переделки получаем что-то типа:

class A
{
    void DoSmth(int param) [multithreaded] 
    {
        bla-bla-bla
        if (CheckSmth())
            bla-bla-bla
    }

    bool CheckSmth() [multithreaded]
    {
        bla-bla-bla
        { [singlethreaded]
            mutex.lock();
            PreapareSmth(); // ОК
            mutex.unlock()
        }
    }

    void PrepareSmth()
    {
        bla-bla-bla
    }
};


Синтаксис придумал только-что, возможны более удачные варианты. Но суть, думаю понятна. Это, конечно, не убережет от всех проблем, но облегчит жизнь разработчику.
Re[3]: thread safe functions
От: kvasya  
Дата: 27.04.10 09:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Синтаксис придумал только-что, возможны более удачные варианты. Но суть, думаю понятна. Это, конечно, не убережет от всех проблем, но облегчит жизнь разработчику.


Я не хотел бы делать каких-либо категоричных утверждений, но мне это напоминает

#include <msword>

int main( int argc, char ** argv )
{
return Winword.Execute();
}




Такой семантический анализ разве возможен в принципе? Что декларирует [multithread]? По каким принципам запрещен вызов из [multithread] в [singlethread], но разрешен в [multithread]?

Все таки думаю openmp ближе всех к теме. Но даже в этом не уверен.
Re: thread safe functions
От: Тот кто сидит в пруду Россия  
Дата: 27.04.10 09:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго всем времени суток.

А> Возник такой вопрос. В C++ есть ключевое слово const. Для параметров и методов оно означает, грубо говоря, что внутри метода нельзя вызывать не константные методы для this и нельзя меня константные параметры. А можно ли придумать что-то похожее, но для пометки методов и функций, которые могут работать параллельно. Может есть какая-то тулза, которая проверяет C++ код и выдает ошибки, если из какой-то "многопоточной" функции вызывается не многопоточная.

Можешь volatile попробовать (но возможны побочные эффекты). У Александреску помнится статья на эту тему была. Ну а дополнительных cv-квалификаторов изобрести не получится, язык такое не поддерживает.

А> Конечно же, там должна быть какая-то штука, которая говорит, что кусок кода внутри многопоточной функции стал однопоточным (поставили критическую секцию и т.п.).


А вот это, увы, не выйдет.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: thread safe functions
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 27.04.10 10:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго всем времени суток.

А> Возник такой вопрос. В C++ есть ключевое слово const. Для параметров и методов оно означает, грубо говоря, что внутри метода нельзя вызывать не константные методы для this и нельзя меня константные параметры. А можно ли придумать что-то похожее, но для пометки методов и функций, которые могут работать параллельно. Может есть какая-то тулза, которая проверяет C++ код и выдает ошибки, если из какой-то "многопоточной" функции вызывается не многопоточная. Конечно же, там должна быть какая-то штука, которая говорит, что кусок кода внутри многопоточной функции стал однопоточным (поставили критическую секцию и т.п.).

Александреску предлагает
volatile


Далее пользуешься как раз как const

class MyClass
{
// ...
bool MyMethod() volatile;
// ...
};
.
Re[2]: thread safe functions
От: zaufi Земля  
Дата: 27.04.10 10:46
Оценка: 6 (2)
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Здравствуйте, Аноним, Вы писали:


А>>Доброго всем времени суток.

А>> Возник такой вопрос. В C++ есть ключевое слово const. Для параметров и методов оно означает, грубо говоря, что внутри метода нельзя вызывать не константные методы для this и нельзя меня константные параметры. А можно ли придумать что-то похожее, но для пометки методов и функций, которые могут работать параллельно. Может есть какая-то тулза, которая проверяет C++ код и выдает ошибки, если из какой-то "многопоточной" функции вызывается не многопоточная. Конечно же, там должна быть какая-то штука, которая говорит, что кусок кода внутри многопоточной функции стал однопоточным (поставили критическую секцию и т.п.).

ATP>Александреску предлагает ...

поправочка: предлагал... но после бурных обсуждений больше не предлагает... (почему? -- идем читать обсуждение в с++.модерейтед)

новый концепт таков (скопипакостничаю кусок кода у соседнего отвечающего :

[code]
class A
{
void DoSmth(int param)
{
bla-bla-bla
if (CheckSmth())
bla-bla-bla
}

bool CheckSmth()
{
bla-bla-bla
{
scoped_lock lock(&mutex);
PreapareSmth(lock); // ОК
}
}

void PrepareSmth(const scoped_lock& /*unused but*/)
{
bla-bla-bla
}
};
[/ccode]

т.е. не MT-safe функции получают ссылку на scoped_lock -- таким образом показывая что их надоо вызывать имея соответствующий лок... ну и без имения лока их тупо не вызвать...

можно конечно ошибиться если у тя в классе 2 mutex'a залочить не тот и передать... но обычно один
Re[3]: thread safe functions
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 28.04.10 06:49
Оценка:
Здравствуйте, zaufi, Вы писали:

ATP>>Александреску предлагает ...

Z>поправочка: предлагал... но после бурных обсуждений больше не предлагает... (почему? -- идем читать обсуждение в с++.модерейтед)

А в чем собственно дело там, в двух словах, ели не трудно ???
Re[3]: thread safe functions
От: Caracrist https://1pwd.org/
Дата: 28.04.10 11:59
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>новый концепт таков


Можно ссылку на то обсуждение и POC? Хотелось бы посмотреть на более менее солидную библиотеку реализованную с таким концептом...
~~~~~
~lol~~
~~~ Single Password Solution
Re: thread safe functions
От: dialex  
Дата: 30.04.10 17:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго всем времени суток.

А> Возник такой вопрос. В C++ есть ключевое слово const. Для параметров и методов оно означает, грубо говоря, что внутри метода нельзя вызывать не константные методы для this и нельзя меня константные параметры. А можно ли придумать что-то похожее, но для пометки методов и функций, которые могут работать параллельно. Может есть какая-то тулза, которая проверяет C++ код и выдает ошибки, если из какой-то "многопоточной" функции вызывается не многопоточная. Конечно же, там должна быть какая-то штука, которая говорит, что кусок кода внутри многопоточной функции стал однопоточным (поставили критическую секцию и т.п.).

http://gimpel.com/html/lint90.htm
смотри Thread Analysis
http://www.gimpel.com/html/pub80/read80.txt
ищи multi-thread support

правда платная
Не произноси ложного свидетельства на ближнего твоего.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.