Разница между функцией Re-entrant и Thread-Safe - PullRequest
8 голосов
/ 17 февраля 2010

В чем разница между функцией повторного входа и поточно-ориентированной функцией?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2010

Повторный вход означает отсутствие глобального состояния (только локальное).

Потокобезопасность означает, что 2 (или более) потока не могут конфликтовать друг с другом (записывая конфликтующие значения).

2 голосов
/ 08 декабря 2016
  • A потокобезопасная функция может вызываться одновременно из нескольких потоки, даже когда вызовы используют общие данные, потому что все ссылки на общие данные сериализуются.

  • A функция повторного входа банка также вызываться одновременно из нескольких потоков, но только если каждый вызов использует свои собственные данные.

Следовательно, потокобезопасная функция всегда реентерабельна, но реентерабельна функция не всегда поточно-ориентированная.

Разница может быть уменьшена на примере

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

Источник: Qt

1 голос
/ 17 февраля 2010

Вы проверили вики статью по теме . Это хорошо объясняет, так что, пожалуйста, смотрите это для полного обсуждения.

Несколько важных битов из статьи:

В вычислительной технике компьютерная программа или подпрограмма называется повторно входящей, если она может быть прервана во время выполнения, а затем ее можно безопасно вызывать снова («повторно вводить») до завершения ее предыдущих вызовов. Прерывание может быть вызвано внутренним действием, таким как переход или вызов, или внешним действием, таким как аппаратное прерывание или сигнал. После завершения повторного вызова предыдущие вызовы возобновят правильное выполнение.

и

Это определение повторного входа отличается от определения безопасности потока в многопоточных средах. Подходящая подпрограмма может обеспечить безопасность потока, но одного только повторного входа может быть недостаточно для обеспечения безопасности потока во всех ситуациях. И наоборот, потокобезопасный код не обязательно должен быть реентерабельным (примеры приведены ниже).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...