2013-06-06 3 views
3

pthread_attr_t을 복사하려면 memcpy을 사용하는 것이 좋습니다. 구조체가 Darwin과 Linux 모두에서 개인용으로 보이기 때문에 좋지 않습니다. 복사의 적절한 방법은 무엇입니까 pthread_attr_t? pthread에는 복사 기능이 없습니다. 모든 속성을 가져 오거나 설정하는 것이 가장 안전한 방법 일 수 있지만 미래의 증거는 아닙니다.pthread_attr_t를 복사하는 방법은 무엇입니까?

#define __SIZEOF_PTHREAD_ATTR_T 36 

typedef union 
{ 
    char __size[__SIZEOF_PTHREAD_ATTR_T]; 
    long int __align; 
} pthread_attr_t; 

답변

3

흥미로운 질문,하지만합니다 (pthread_attr_init() 사양의 이론적 근거 섹션에서 판단) 대답은 당신이로 안된다는 것입니다 :

는 단지 참조를 위해, 내 우분투 상자의 모습입니다 pthread_attr_t 개체를 복사하십시오. 당신은 맞습니다. memcpy() 등은 신뢰할 수있는 메커니즘이 아니며 (어쨌든 평범한 오래된 과제는 무엇이 잘못된 것입니까?).

+1

[sys/types.h] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html)에는 pthread_attr_t에 대한 할당 작업이 정의되어 있지 않다는 내용이 있습니다. – nos

+0

감사합니다. . 네, 할당이 빠졌지 만'pthread_attr_t'는 다중 스레드 생성을 위해 재사용 될 수 있습니다. 나는'pthread_attr_t'를 복사하지 않고 도망 갈 수있을 것이라고 생각하지만, 이것을하기위한 적절한 방법이 있는지 궁금합니다. – dbv

+1

내가 이것을 할 필요가있을 때 나는 하나의 pthread_attr_t에서 속성 필드를 읽고 그것을 다른 사람에게 쓰는 함수를 작성했다. 자질구레하고 귀찮은 누군가가 가서 pthread lib의 새 버전에서 필드를 추가/제거하면. 그러나 그것은 당신이해야하는 것처럼 보입니다. – bazza

관련 문제