freebsd终究还是不支持pthread_mutexattr_setpshared

今天调程序调的郁闷,先是查mmap的sync方式。后来发现命令行的fsync居然和系统调用的fsync有不同的效果,前者对NOSYNC的mmap无效。
后来拿了ACE的代码做测试,不是core dump就是显示Invalid argument
后来终于src/lib/libpthread中找到了这两个函数的实现

int
_pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr,
int *pshared)
{
    if (attr == NULL || *attr == NULL) return (EINVAL);

    pshared = PTHREAD_PROCESS_PRIVATE;
    return (0);
}

int
_pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared)
{
    if (attr == NULL || *attr == NULL) return (EINVAL);

    if  (pshared != PTHREAD_PROCESS_PRIVATE) return (EINVAL);
    return (0);
}

压根儿就只允许PTHREAD_PROCESS_PRIVATE的方式映射。
一会儿去solaris 9上面测试下。
教训:没有文档的函数不要用。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥