The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"как организовать критическую секцию в linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"как организовать критическую секцию в linux"  
Сообщение от Артем (??) on 20-Авг-07, 17:53 
В Windows если вызвать ::EnterCriticalSection() из одной и той же нити несколько раз, все вызовы будут успешны. Т.е. вот такой код не остановится навечно во втором вызове ::EnterCriticalSection(), а отработает до конца.

// Нить №1
void Proc1()
{
    ::EnterCriticalSection(&m_lock);
    // ...
    Proc2()
    // ...
    ::LeaveCriticalSection(&m_lock);
}

// Все еще нить №1
void Proc2()
{
    ::EnterCriticalSection(&m_lock);
    // ...
    ::LeaveCriticalSection(&m_lock);
}

как такого же добиться в Linux?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "как организовать критическую секцию в linux"  
Сообщение от Michelnok (ok) on 20-Авг-07, 18:09 
Если ты не про ядро, то предполагается что ты собираешься использовать мутексы из 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);
...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "как организовать критическую секцию в linux"  
Сообщение от Ray Dudu email on 20-Авг-07, 18:10 
>как такого же добиться в Linux?

man pthread_mutexattr_settype на предмет PTHREAD_MUTEX_RECURSIVE

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру