2014-11-22 6 views
1

Я пытаюсь разделить неназванный мачарный семафор между двумя процессами. Я могу создать его и подождать по нему в том же процессе.Поделитесь неназванным семафором между процессами в Mac OS

semaphore_t semaphore = 0; 
mach_error_t err = semaphore_create(mach_task_self(), &semaphore, SYNC_POLICY_FIFO, 0); 
... 
semaphore_wait(semaphore); 

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

Я уже пробовал такие вещи, как:

mach_port_allocate(target, MACH_PORT_RIGHT_RECEIVE, targetSemaphore) 
mach_port_insert_right(target, targetSemaphore, semaphore, MACH_MSG_TYPE_COPY_SEND) 

Который даст ошибку, так как имя порта уже существует в целевом процессе или «неизвестная ошибка», если я не передать его в целевом процессе.

И даже:

mach_msg_send 
mach_msg_receive 

Но я не могу даже получить порт правой формы один процесс пыльников, чтобы отправить что-нибудь.

Что я делаю неправильно и это возможно?

ответ

1

Я понял это:

mach_port_extract_right 

это правильный путь, вместо того, чтобы:

mach_port_insert_right 

Затем делать это, будет делать работу:

semaphore_t semaphore = 0; 
mach_error_t err = semaphore_create(mach_task_self(), &semaphore, SYNC_POLICY_FIFO, 0); 

err = mach_port_allocate(target, MACH_PORT_RIGHT_RECEIVE, &receivePort); 

mach_msg_type_name_t type; 
semaphore_t sendPort = 0; 
err = mach_port_extract_right(target, receivePort, MACH_MSG_TYPE_MAKE_SEND, &sendPort, &type); 

//Send semaphore using port 
mach_msg_send(&msg.header);