Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Multi threaded locking, заблокировать оббект 
V
    Опции темы
sergioK1
Дата 30.4.2011, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



У меня в памяти Link List,  в каждый момент времени один из потоков обрабытывает конретный node ,
 mutex мне не годиться , есть два варианта conditional и semaphore .

в java все просто - synchronise(object){
                     моем случае это будет конкретеый узел, к которому закрыт доступ,
}

мне нужно это механизм реализовать на С, без фреймворков,
т,е, мне надо семаафор  связать с конкретным узлом ,
как это лучше всего сделать,? 
на нижнем уровне со средами не никогда работал 

P.S
поиском пользовался и форум и гугля инфа есть но слишком много, 
PM MAIL   Вверх
boostcoder
Дата 30.4.2011, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



вам нужно в каждый нод добавить мьютекс. тогда можно будет использовать так же как и в жабе.
Код

#include <pthread.h>

struct node {
   int data;
   pthread_mutex_t mutex;
};

void synchronise(node* n) {
   pthread_mutex_lock(&n->mutex);
   n->data = 33;
   pthread_mutex_unlock(&n->mutex);
}

int main() {
   node* n = new node;
   synchronise(n);
}

http://liveworkspace.org/code/dc3554b79ef5...02fa6dea66eaacd

но это увеличит расходы памяти.
http://liveworkspace.org/code/ffdd101f34a8...8cb04bcc36fb373

Это сообщение отредактировал(а) boostcoder - 30.4.2011, 14:53
PM WWW   Вверх
sergioK1
Дата 30.4.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(boostcoder @ 30.4.2011,  12:26)
вам нужно в каждый нод добавить мьютекс. тогда можно будет использовать так же как и в жабе.
Код

#include <pthread.h>

struct node {
   int data;
   pthread_mutex_t mutex;
};

void synchronise(node* n) {
   pthread_mutex_lock(&n->mutex);
   n->data = 33;
   pthread_mutex_unlock(&n->mutex);
}

int main() {
   node* n = new node;
   synchronise(n);
}

http://liveworkspace.org/code/dc3554b79ef5...02fa6dea66eaacd

но это увеличит расходы памяти.
http://liveworkspace.org/code/ffdd101f34a8...8cb04bcc36fb373

cпасибо ,понятно что 24байта добавит, 
а почему в шеле man man -k pthread_mutex_lock дает пустую строку ? 
Я не хочу доку в нете смотреть,  это не грамотно IMHO



Это сообщение отредактировал(а) sergioK1 - 30.4.2011, 23:32
PM MAIL   Вверх
boostcoder
Дата 30.4.2011, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(sergioK1 @  30.4.2011,  23:29 Найти цитируемый пост)
а почему в шеле man man -k pthread_mutex_lock дает пустую строку

возможно manpages`ы не установлены..
PM WWW   Вверх
sergioK1
Дата 30.4.2011, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(boostcoder @ 30.4.2011,  22:34)
Цитата(sergioK1 @  30.4.2011,  23:29 Найти цитируемый пост)
а почему в шеле man man -k pthread_mutex_lock дает пустую строку

возможно manpages`ы не установлены..

поставил sudo apt-get install manpages-dev manpages-posix-dev freebsd-manpages 

тема решена 


Это сообщение отредактировал(а) sergioK1 - 1.5.2011, 00:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0963 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.