Безопасно ли выполнять блокирующие вызовы write () для одного и того же сокета TCP из нескольких потоков?

Modern RegEx Flavors (PCRE)

Включает C, C ++, Delphi, EditPad, Java, JavaScript, Perl, PHP (preg), PostgreSQL, PowerGREP, PowerShell, Python, REALbasic, Real Studio, Ruby , TCL, VB.Net, VBScript, wxWidgets, XML Schema, Xojo, XRegExp.PCRE совместимость может различаться

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Anywhere: . ^ $ * + - ? ( ) [ ] { } \ |


Legacy RegEx Flavors (BRE / ERE)

Включает поддержку awk, ed, egrep, emacs, GNUlib, grep, PHP (ereg), MySQL, Oracle, R, sed.PCRE версии или с помощью расширений

ERE / awk / egrep / emacs

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Вне класса символов: . ^ $ * + ? ( ) [ { } \ | & nbsp; & nbsp; & nbsp; & nbsp; Внутри класса символов: ^ - [ ]

BRE / ed / grep / sed

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; внутри класса символов: ^ - [ ] & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; g16]


Примечания

  • Если неуверенность a bout с определенным символом, он может быть экранирован как \xFF
  • Буквенно-цифровые символы не могут быть экранированы с помощью обратного слэша
  • Произвольные символы могут быть экранированы с помощью обратного слэша в PCRE, но не BRE / ERE (при необходимости их нужно избегать). Для PCRE ] - требуется только экранирование в классе символов, но я сохранил их в одном списке для простоты
  • . Цитированные строки выражения также должны иметь экранированные символы пробега, а часто с обратной косой чертой удвоились ( как "(\")(/)(\\.)" по сравнению с /(")(\/)(\.)/ в JavaScript)
  • . Помимо экранов, различные реализации регулярных выражений могут поддерживать различные модификаторы, классы символов, якоря, кванторы и другие функции. Для получения дополнительной информации посмотрите regular-expressions.info или используйте regex101.com , чтобы проверить свои выражения в реальном времени
11
задан Robert Harvey 21 September 2009 в 22:46
поделиться

1 ответ

Пробует

TL; DR: с целью написания и отладочного кода, безопасно предполагать атомарность, если ваша цель не является системой жизнеобеспечения.


Всегда будет плохо, если send (2) (то же, что и write (2) ) на сокете tcp не является атомарным. Нет веских причин для реализации неатомарной записи. Все версии Unix и Windows пытаются сохранить атомарность записи, но, по-видимому, очень немногие предоставляют гарантию.

Linux известен «обычно» 1. поймите это правильно, но в нем есть ошибка, даже в последних ядрах. Он пытается заблокировать сокет, но при определенных обстоятельствах может произойти сбой выделения памяти и запись будет разделена. См. эту запись в блоге IBM на sendmsg для получения подробной информации. [Ссылка исправлена.]

Согласно этим тестам, только AIX и Solaris полностью прошли стресс-тест потока. Неизвестно, есть ли даже в этих системах случаи отказа, которые просто не были обнаружены.


1. TL; DR: Почти всегда, т. Е. Всегда, за исключением наличия определенной ошибки. Неизвестно, есть ли даже в этих системах случаи отказа, которые просто не были обнаружены.


1. TL; DR: Почти всегда, т. Е. Всегда, за исключением наличия определенной ошибки. Неизвестно, есть ли даже в этих системах случаи отказа, которые просто не были обнаружены.


1. TL; DR: Почти всегда, т. Е. Всегда, за исключением наличия определенной ошибки.
12
ответ дан 3 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

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