LINUX.ORG.RU

Pthread и fork

 , ,


0

1

Доброго времени суток. Разбираюсь с бинарными семафорами(мьютексами). До этого всегда для порождения новых процессов использовал fork, однако для мьютексов нашел только примеры где используется pthread_create. Отсюда вопрос - в чем разница между ними и означает ли приставка pthread в названии функции pthread_mutex_lock, что его можно использовать только для процессов порожденных через pthread_create? Как в таком случае синхронизировать процессы, порожденные fork'ом?

Не пинайте пожалуйста за ламерские вопросы. Заранее огромное спасибо!


Префикс pthread_ означает только принадлежность к библиотеке pthreads. Всё остальное — домыслы.

post-factum ★★★★★
()

для процессов — семафоры

man sem_open

anonymous
()

Смотри примеры с PTHREAD_PROCESS_SHARED или через именованные семафоры (sem_open()).

mky ★★★★★
()

Ты путаешь процессы и потоки. pthread_mutex работает только с потоками, для межпроцессного IPC есть другие механизмы.

slovazap ★★★★★
()

Почитай Стивенса: "UNIX: взаимодействие процессов", и тебе все станет ясно.

Выше уже сказали о семафорах. Еще есть всякие flock, семафоры/flock на псевдофайлы в разделяемой памяти и т.д., и т.п.

Eddy_Em ☆☆☆☆☆
()

в чем разница между ними

LINUX System Programming. Robert Love

Threads

Each process consists of one or more threads of execution (usually just called threads). A thread is the unit of activity within a process, the abstraction responsible for executing code, and maintaining the process’ running state. Most processes consist of only a single thread; they are called single-threaded. Processes that contain multiple threads are said to be multithreaded. Traditionally, Unix programs have been single-threaded, owing to Unix’s historic simplicity, fast process creation times, and robust IPC mechanisms, all of which mitigate the desire for threads. A thread consists of a stack (which stores its local variables, just as the process stack does on nonthreaded systems), processor state, and a current location in the object code (usually stored in the processor’s instruction pointer). The majority of the remaining parts of a process are shared among all threads. Internally, the Linux kernel implements a unique view of threads: they are simply normal processes that happen to share some resources (most notably, an address space). In user space, Linux implements threads in accordance with POSIX 1003.1c (known as pthreads). The name of the current Linux thread implementation, which is part of glibc, is the Native POSIX Threading Library (NPTL).

означает ли приставка pthread в названии функции pthread_mutex_lock, что его можно использовать только для процессов порожденных через pthread_create

Грубо говоря, да. Точно говоря, некорректно называть «порожденных через pthread_create» процессами.

Как в таком случае синхронизировать процессы, порожденные fork'ом?

LINUX System Programming. Robert Love

Interprocess Communication

Allowing processes to exchange information and notify each other of events is one of an operating system’s most important jobs. The Linux kernel implements most of the historic Unix IPC mechanisms—including those defined and standardized by both System V and POSIX—as well as implementing a mechanism or two of its own. IPC mechanisms supported by Linux include pipes, named pipes, semaphores, message queues, shared memory, and futexes.

Самому мне особо активно не приходится синхронизировать _процессы_, поэтому прямых советов не будет. Жизненные примеры можешь смотреть в коде Kamailio, там распараллеленные _процессы_ как раз используются.

Krieger_Od ★★
()
Ответ на: комментарий от Eddy_Em

Тук-тук-тук. Стук-стук-стук. Знакомо, да?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.