Глобальные переменные и thread safety

 
Global variables aren't thread safe. (Пардон, не припомню русского термина).

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

Например, счетчик не будет работать:
int init()
{
    if (GlobalVariableCheck("Experts"))
    {
        double dnum = GlobalVariableGet("Experts");
        dnum += 1.;
        GlobalVariableSet("Experts", dnum);
    }
    ...
}


Надо бы что-нибудь типа

int init()
{
    if (GlobalVariableCheck("Experts"))
    {
        double dnum;
        
        GlobalVariableLock("Experts");

        dnum = GlobalVariableGet("Experts");
        dnum += 1.;
        GlobalVariableSet("Experts", dnum);

        GlobalVariableUnlock("Experts");
    }
    ...
}
 
глобальные переменные у нас защищены синхронизирующим объектом ядра. если Вы хотите из глобальной переменной устроить семафор, то пользуйтесь функцией GlobalVariableSetOnCondition. о применении этой функции посмотрите большой тред "ошибка номер 6"
Причина обращения: