Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Больше устройств поддерживают C и C++?
if (i != NULL) {
FooImpl *tmp_i = i;
state_mutex.unlock ();
tmp_i->WorkImpl ();
}
{
i = NULL;
call i->Free ();
}
вам этот код странным не кажется?
FooImpl *tmp_i = i; i = NULL; call i->Free ();
call tmp_i->Free ();
// объявляем int a и говорим, что доступ к этой переменной // разрешён только при захваченном my_mutex int $mutex(my_mutex) a;
void $lock Mutex::lock (); void $unlock Mutex::unlock ();
void f ()
{
my_mutex.lock ();
a = 1; // Правильно
my_mutex.unlock ();
a = 2; // Ошибка
}
// При вызове этой функции my_mutex должен быть захвачен
void $mutex(my_mutex) g ()
{
a = 3; // Правильно
my_mutex.lock (); // Ошибка: my_mutex уже захвачен
my_mutex.unlock ();
a = 4; // Ошибка: не захвачен my_mutex
}
xchg eax,ebx
lock xchg eax,ebx
void processRequest ()
{
state_mutex.lock ();
++ num_back;
unsigned tmp_num_back = tmp_num_back;
state_mutex.unlock ();
backend->doSomething (tmp_num_back);
state_mutex.lock ();
++ num_requests;
state_mutex.unlock ();
}
void Process()
{
{
AutoLock lock(SomeLock);
++ num_back;
unsigned tmp_num_back = tmp_num_back;
}
backend->doSomething (tmp_num_back);
{
AutoLock lock(SomeLock);
++ num_requests;
}
Язык Mt: C для высоконагруженных серверов