Взаимное исключение для процессов направляющих

Возможно я неправильно понял вопрос, но преобразование от неподписанного символа до символа не является неуказанным, это является зависящим от реализации (4.7-3 в стандарте C++).

тип 1-байтового символа в C++ является "символом", не "неподписанным символом". Это дает реализациям немного больше свободы сделать лучшую вещь на платформе (например, организация по стандартизации, возможно, полагала, что там существуют центральные процессоры, где арифметика байта со знаком быстрее, чем неподписанная арифметика байта, хотя это - предположение с моей стороны). Также для совместимости с C. Результатом удаления этого вида экзистенциальной неуверенности от C++ является C#;-)

, Учитывая, что "символьный" тип существует, я думаю, что имеет смысл для обычных потоков использовать его даже при том, что его со знаком не определяется. Таким образом, возможно, на Ваш вопрос отвечает ответ на, "почему C++ только не определил символ, чтобы быть неподписанным?"

5
задан Ryan Bigg 10 October 2009 в 02:29
поделиться

3 ответа

Если вам просто нужно предотвратить одновременную работу нескольких писателей с файлом, вы можете использовать метод File # flock , чтобы запросить монопольную блокировку записи у каждого процесса:

fh = File.new("/some/file/path")
begin
  fh.flock(File::LOCK_EX)
  # ... write to the file here, or perform some other critical operation
ensure
  fh.flock(File::LOCK_UN)
end

Примечание. Помещение вызова разблокировки в блок гарантирует, что важен для предотвращения взаимоблокировки, если после блокировки файла возникает неперехваченное исключение.

14
ответ дан 18 December 2019 в 09:08
поделиться

Насколько мне известно, единственный способ сделать это в Подобная среда должна использовать семафор на основе файлов - прикоснитесь к файлу блокировки, выполните свою работу, удалите файл блокировки. Сделать процесс сбойным, если есть блокировка файла.

У вас также может быть служба, которая записывает в файл, который является многопоточным, и заставляет приложения взаимодействовать со службой для изменения файла, а не позволять им изменять файл напрямую .

2
ответ дан 18 December 2019 в 09:08
поделиться

Вы можете использовать планировщик фоновых заданий для выполнения самой работы, например delayed_job ( http://github.com/tobi/delayed_job ).

2
ответ дан 18 December 2019 в 09:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: