1

我正在尝试在两个进程之间共享一个未命名的马赫信号量。我可以创建一个并在同一过程中等待它。

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

但是我什至无法从一个进程中获得一个端口来发送任何东西。

我做错了什么,甚至有可能吗?

4

1 回答 1

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);
于 2014-11-22T23:53:54.200 回答