В Windows если вызвать ::EnterCriticalSection() из одной и той же нити несколько раз, все вызовы будут успешны. Т.е. вот такой код не остановится навечно во втором вызове ::EnterCriticalSection(), а отработает до конца.// Нить №1
void Proc1()
{
::EnterCriticalSection(&m_lock);
// ...
Proc2()
// ...
::LeaveCriticalSection(&m_lock);
}// Все еще нить №1
void Proc2()
{
::EnterCriticalSection(&m_lock);
// ...
::LeaveCriticalSection(&m_lock);
}как такого же добиться в Linux?
Если ты не про ядро, то предполагается что ты собираешься использовать мутексы из POSIX threads.По-умолчанию поведение не определено, но есть тип мутексов PTHREAD_MUTEX_RECURSIVE.
Делает то что ты хочешь, т.е. можно вызывать pthread_mutex_lock в одном и том же потоке.
Так что:pthread_mutexattr_t mutex_attr;
pthread_mutex_t mutex;
...
pthread_mutexattr_init(&mutex_attr);
pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&mutex, &attr);
...
>как такого же добиться в Linux?man pthread_mutexattr_settype на предмет PTHREAD_MUTEX_RECURSIVE