Grep только определенные файлы

Я наткнулся на этот пост, потому что у меня было подобное требование. Или, по крайней мере, я так и думал.

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

Прочитав немного, я уволил свои страхи и понял, что все говорят: если вы этого хотите, вы делаете это неправильно. Кроме того, я был убежден, что вы можете полагаться на ОС, чтобы выполнять свою работу, и не позволять вашему потоку голодать.

Чтобы добраться до этого, я немного поработал, чтобы лучше понять, как блокировки работали под Linux , Я начал с того, что посмотрел на исходный код glibc и спецификации pthreads (Posix Threads), потому что я работал на C ++ в Linux. Я не знаю, использует ли Python pthreads под капотом, но я предполагаю, что это возможно.

Я не нашел какой-либо спецификации в нескольких ссылках на pthreads, относящихся к порядку разблокируется.

Я нашел: блокировки в pthreads в Linux реализованы с использованием функции ядра, называемой futex .

http: // man7 .org / linux / man-pages / man2 / futex.2.html

http://man7.org/linux/man-pages/man7/futex.7. html

Ссылка на ссылки на первую из этих страниц приводит к этому PDF:

https://www.kernel.org/doc /ols/2002/ols2002-pages-479-495.pdf

Это немного объясняет стратегии разблокировки и о том, как futexes работают и реализуются в ядре Linux, и много больше.

И там я нашел то, что хотел. В нем объясняется, что futexes реализованы в ядре таким образом, что разблокировки в основном выполняются в порядке FIFO (для повышения справедливости). Тем не менее, это не гарантируется, и возможно, что один поток может немного перепрыгнуть линию. Они позволяют это не слишком усложнять код и позволяют достичь хорошей производительности, не теряя его из-за крайних мер по обеспечению соблюдения порядка FIFO.

Итак, в основном, у вас есть:

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

Реализация Linux в библиотеке pthreads основана на функции / методе futex, которая реализует мьютексы, и в основном пытается сделать разблокировку мьютексов в стиле FIFO, но не гарантирует, что это будет сделано в этом порядке.

-9
задан Bill 4 December 2012 в 21:37
поделиться