在尝试实现Named pipe
(例如,使用相同共享内存的两个独立的不相关进程)时,我一直在阅读我将使用pthread_atfork
和atexit
.
我完全同意使用互斥体和信号量——使用它们我们可以决定何时process A
读/写以及何时process B
读/写。
但是出于什么原因我想为此使用pthread_atfork
和线程?
编辑:
一个不使用信号量会付出高昂代价的例子:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/file.h>
#include <sys/times.h>
#include <sys/stat.h>
#include <semaphore.h>
#include <assert.h>
// Simple busy-wait loop to throw off our timing.
void busywait(void)
{
clock_t t1 = times(NULL);
while (times(NULL) - t1 < 2);
}
int main(int argc, char *argv[])
{
const char *message = "Hello World\n";
int n = strlen(message) / 2;
pid_t pid = fork();
int i0 = (pid == 0) ? 0 : n;
int i;
for (i = 0; i < n; i++) {
write(1, message + i0 + i, 1);
busywait();
}
}