Thread safe что это
Перейти к содержимому

Thread safe что это

  • автор:

Thread-safety

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

В общем случае потоковая безопасность сложно устанавливается. Но существует несколько источников выявления нарушений потоковой безопасности:

  • доступ к глобальным переменным или динамической памяти (куче);
  • выделение/освобождение ресурсов, имеющих глобальные ограничения (файлы, процессы и др.);
  • неявный доступ через ссылки и указатели;
  • побочный эффект функций;

Есть несколько способов достигнуть потоковой безопасности:

Реентерабельность Написание кода в таком стиле, что он может быть частично выполнен одним потоком, затем другим, и продолжен первым. Это требует сохранения состояния в локальных переменных, обычно на стеке, вместо глобальных или статических переменных. Линеаризуемость Написание кода процедур (операций) таким образом, что результат любого их параллельного выполнения эквивалентен некоторому последовательному выполнению.

Ссылки

  • Writing Reentrant and Thread-Safe Code
  • Статья «Design for thread safety»
  • Программирование
  • Управление конкурентными потоками

Wikimedia Foundation . 2010 .

  • Thran (Galactik Football)
  • Three (альбом)

Полезное

Смотреть что такое «Thread-safety» в других словарях:

  • Thread safety — is a computer programming concept applicable in the context of multi threaded programs. A piece of code is thread safe if it functions correctly during simultaneous execution by multiple threads. In particular, it must satisfy the need for… … Wikipedia
  • Thread-Safety — Saltar a navegación, búsqueda Thread safety (Seguridad en hilos) es un concepto de programación de computadores aplicable en el contexto de los programas multi threaded. Una pieza de código es thread safe si funciona correctamente durante la… … Wikipedia Español
  • Thread (computer science) — This article is about the concurrency concept. For the multithreading in hardware, see Multithreading (computer architecture). For the form of code consisting entirely of subroutine calls, see Threaded code. For other uses, see Thread… … Wikipedia
  • Thread pool pattern — In the thread pool pattern in programming, a number of threads are created to perform a number of tasks, which are usually organized in a queue. Typically, there are many more tasks than threads. As soon as a thread completes its task, it will… … Wikipedia
  • Thread-Sicherheit — Threadsicherheit (engl. thread safety) ist eine Eigenschaft von Softwarekomponenten und hat eine wichtige Bedeutung in der Softwareentwicklung. Sie besagt, dass eine Komponente gleichzeitig von verschiedenen Programmbereichen mehrfach ausgeführt… … Deutsch Wikipedia
  • Thread-safe — Threadsicherheit (engl. thread safety) ist eine Eigenschaft von Softwarekomponenten und hat eine wichtige Bedeutung in der Softwareentwicklung. Sie besagt, dass eine Komponente gleichzeitig von verschiedenen Programmbereichen mehrfach ausgeführt… … Deutsch Wikipedia
  • Safety wire — Safety wiring of two pairs of drilled head bolts Safety wire or lockwire is common in the aircraft and racing industries as an extra precaution to keep vital fasteners from unintentionally loosening and parts from falling off due to vibration or… … Wikipedia
  • Safety — (Roget s Thesaurus) < N PARAG:Safety >N GRP: N 1 Sgm: N 1 safety safety security surety impregnability Sgm: N 1 invulnerability invulnerability invulnerableness &c. adj. Sgm: N 1 danger past danger past danger over Sgm … English dictionary for students
  • thread — thread1 [θred] n ▬▬▬▬▬▬▬ 1¦(for sewing)¦ 2¦(ideas)¦ 3 pick up the thread(s) 4¦(internet)¦ 5¦(line)¦ 6¦(on a screw)¦ 7 threads ▬▬▬▬▬▬▬ [: Old English; Origin: thrAd] 1.) ¦(FOR SEWING)¦ … Dictionary of contemporary English
  • thread — 1 noun 1 COTTON/SILK ETC (C, U) a long thin string of cotton, silk etc used to sew or weave cloth: Have you got a needle and thread? 2 IDEAS (singular) the connection between the different parts of an explanation, story etc: a common thread… … Longman dictionary of contemporary English
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

Потокобезопасность в стандартной библиотеке C++

Следующие правила потокобезопасности применяются ко всем классам в стандартной библиотеке C++, включая shared_ptr , как описано ниже. Иногда предоставляются более строгие гарантии, например стандартные объекты iostream, как описано ниже, и типы, предназначенные для многопоточности, например в .

Объект является потокобезопасным при чтении из нескольких потоков. Например, объект А можно безопасно считать из потока 1 и потока 2 одновременно.

Если объект записывается одним потоком, то все операции чтения и записи в этот объект в одном или других потоках должны быть защищены. Например, если поток 1 записывает данные в объект А, потоку 2 следует запретить чтение из объекта А и запись в него.

Это безопасно для чтения и записи в один экземпляр типа, даже если другой поток считывает или записывает в другой экземпляр одного типа. Например, учитывая объекты A и B одного типа, это безопасно, когда A записывается в потоке 1 и B считывается в потоке 2.

shared_ptr

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

iostream

Стандартные объекты cin iostream , cout , cerr clog wcout wcin wcerr и следуйте тем же правилам, что и wclog другие классы, за исключением этого: это безопасно для записи в объект из нескольких потоков. Например, поток 1 может записывать cout в одно и то же время, что и поток 2. Однако это может привести к смешиванию выходных данных двух потоков.

Чтение из буфера потока считается не операцией чтения, Вместо этого она считается операцией записи, так как состояние класса изменяется.

Что значит thread safe / non thread safe и какой выбирать при скачивании php?

введите сюда описание изображения

Если будете настраивать PHP как FastCGI модуль(т.е. запуск для обработки каждого запроса нового экземпляра PHP), то потокобезопасность не нужна — выбирайте NTS, так как оно будет работать быстрее.

Если же будете настраивать как mod_php (например под Apache), то потокобезопасность необходима.

PS также некоторые расширения требуют потокобезопасной версии. На вскидку не вспомню какие, но точно были. Читайте документацию по необходимым расширениям.

Применение synchronized

Применение synchronized - 1

— Сегодня я расскажу тебе о практическом применении synchronized.

Когда в программе много объектов и нитей, то часто случаются ситуации, когда с одним объектом одновременно работает несколько нитей. Нити при этом мешают друг другу.

— Да, я это уже знаю.

— Так вот, допустим, у тебя есть объект, к которому обращаются несколько нитей. Чтобы с ним не было проблем можно сделать две вещи.

Первая – все места работы с данным объектом обернуть в блоки synchronized. Но такой подход может не сработать, если какой-то программист в своем коде будет обращаться к объекту напрямую, без блока synchronized.

Java-университет

Поэтому чаще всего применяется второй подход – объект делают нитебезопасным (thread-safe). Т.е. механизм synchronized встраивают в сам объект – объявляют его методы synchronized и/или оборачивают код внутри методов в блоки synchronized.

— Т.е все объекты, которые могут использоваться из разных нитей, а это почти все объекты программы, я должен сделать thread-safe?

— В общем-то, да. На самом деле не все объекты программы используются из разных нитей, но обычно много. Так что, когда ты начинаешь писать код своей нити и в ней обращаешься к различным объектам своей программы, то при вызове каждого метода, ты должен задуматься – а безопасен ли этот вызов?

— Безопасен (thread-safe) — это безопасен при вызове из разных нитей.

Вот тебе несколько примеров. Допустим, у тебя есть объект String, к которому происходит обращение из разных нитей. Как ты уже должен был запомнить, String (и все другие примитивные типы) является immutable. А это значит, что после создания объект не изменяется. А значит, и «сломать» такой объект нельзя. Все immutable объекты являются thread-safe.

— Теперь, допустим, тебе нужна изменяемая строка.

— Ага, помню. Есть две вида таких строк – StringBuffer и StringBuilder. StringBuffer – это аналог StringBuilder, но у него все методы синхронизированы. Он тоже является thread-safe?

— Да. Если тебе нужно обращаться к объекту StringBuilder из разных нитей, то нужно заменить его на StringBuffer, иначе рано или поздно нити будут менять его одновременно и «поломают».

— А если объект, к которому происходит обращение из разных нитей, – это объект моего собственного класса? Мне тоже надо добавлять к его методам synchronized?

— Да. Лучше всего руководствоваться таким правилом – все объекты, к которым происходит обращение из разных нитей, должны быть thread-safe.

— Ясно. Не думал, что все так серьезно. Спасибо, Элли.

— Пожалуйста. Надеюсь, эти советы помогут тебе, когда Диего даст тебе пару своих легких задач ☺

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *