pthread_detachについて読んだところ、呼び出されたときにスレッドによって取得されたリソースが解放されるので、少し実験しましたが、スレッドを切り離した後でも、リソースが解放されていないようです。コードは次のとおりです。
#define SIZE 2048
void *func(void *arg);
int main()
{
void *x;
int i;
pthread_t tid;
pthread_attr_t attr,attr2;
int fp=open("SharedMemWithMutex.c",O_RDONLY);
pthread_attr_init(&attr2);
pthread_create(&tid,&attr2,func,&fp);
pthread_join(tid,&x);
i=*(int *)x;
fprintf(stderr,"BEFORE DETACH: read bytes are %d\n",i);
pthread_detach(tid);
i=*(int *)x;
fprintf(stderr,"AFTER DETACH: read bytes are %d\n",i);
return 0;
}
void *func(void *arg)
{
int fp=*(int *)arg;
char buf[SIZE];
int *readbytes=(int *) malloc(sizeof(int));
*readbytes=read(fp,buf,SIZE);
return readbytes;
}