Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 16:32   #1
Ryabinin313
Пользователь
 
Регистрация: 25.09.2010
Сообщений: 24
Вопрос Многопоточность в C

Здравствуйте! У меня проблема в следующем:

Есть девять потоков которые одновременно открывают индексный файл, читают его, и закрывают. Не получается их синхронизировать: когда последний поток не закончил закрытие файла, другой поток снова пытается его открыть, но дескриптор к тому времени становится = -1. Мне нужно чтобы сначала функция закрытия полностью выполнилась, а потом уже если нужно другой поток заново открыл файл.

Код писал не я. К тому моменту когда потоки открывают/читают/закрывают файл они уже имеют семафоры. Я хочу сделать следующее:

Close(){
// когда выполняется этот код
}
Open(){
// остальные потоки заходящие в Open должны ждать завершения Close
// после этого должны возобновить работу(чтобы не было проблем с одновременным
// открытием файла наверное лучше чтобы они начали открывать его последовательно)
}

Подскажите, пожалуйста, как это можно реализовать?
Ryabinin313 вне форума Ответить с цитированием
Старый 30.10.2011, 18:01   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Семафоры
"Последовательно" здесь лишнее. Сначала семафор опускается (увеличивается на 1), потом идёт вся работа с файлом, от открытия до закрытия, и только потом семафор поднимается (уменьшается на 1). Соответственно, опускается семафор в начале Open(), а поднимается в самом конце Close().
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 18:02   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

mutex используй, если доступ к файлу может осуществляться только из одного потока
counter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность WennY Общие вопросы Delphi 11 23.04.2011 00:46
Многопоточность boo_mago Общие вопросы C/C++ 7 21.03.2011 21:23
Многопоточность и с++ Koshmarovsky Visual C++ 13 06.09.2010 20:39
Многопоточность CrazyDude Общие вопросы Delphi 1 18.04.2010 19:00
Многопоточность JakSon Общие вопросы Delphi 10 27.12.2009 02:19