Понятие «потокобезопасности» в C 11 было предметом обсуждения дискуссий вокруг понятия «const». В этой статье исследуется взаимосвязь между const и потокобезопасностью, проясняются заблуждения и обеспечивается более глубокое понимание поведения языка.
Термин «потокобезопасность» подразумевает, что к объекту могут одновременно обращаться несколько потоков, не вызывая повреждения данных. Стандарт C 11 определяет потокобезопасность на основе отсутствия гонок за данными, которые возникают, когда два конфликтующих действия получают доступ к одной и той же области памяти или изменяют ее.
В C 11 ожидается, что константные объекты будут потокобезопасными операциями. выполняемые над ними операции, как предполагается, доступны только для чтения. Это ожидание вытекает из требования стандартной библиотеки о том, чтобы стандартные библиотечные функции избегали гонок за данными в константных объектах. эквивалентно «синхронизированному» Java. В то время как ключевое слово «synchronized» в Java явно обеспечивает безопасность потоков, const в C 11 просто указывает, что объект недоступен для записи.
Последствия для проектирования объектов
Различие между потокобезопасностью и константой имеет значение для проектирования объектов. Если элементы данных объекта неизменяемо устанавливаются во время создания, объявление объекта как const гарантирует, что одновременный доступ является потокобезопасным. Однако если состояние объекта можно изменить, необходимы дополнительные механизмы синхронизации, чтобы сделать его по-настоящему потокобезопасным.
Const в C 11 подразумевает ожидание потокобезопасности, особенно в контекст Стандартной библиотеки. Это не гарантированный механизм потокобезопасности, поскольку он не обеспечивает доступ только для чтения. Де
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3