2014-11-29 3 views
0

참조 계산 된 버퍼가 있습니다. 하나의 스레드에서, 나는 그것을 채 웁니다. 참조 횟수를 줄이고 많은 데이터를 기록합니다.참조 계산 된 버퍼를 원자 적으로 참조 된 버퍼로 업그레이드

이제 refcount가 끝나면 완료 될 때 버퍼를 사람이 읽을 수있는 한 안전하게 원자 단위로 다시 채울 수 있습니다. 의사 코드에서는이 같은 같습니다 (!와 refcount는 쓰기) 나는 모든 버퍼 쓰기를 확인하기 위해 메모리 장벽의 일종을 필요로 의심

refcount = 1 
write some data 
refcount += 1 
write some data 
refcount -= 1 
write some data 

if refcount != 1: 
    fail() 

// do something here? 

for i in range(0, 100): 
    refcount.atomic_increment() 
    spawn_thread({ 
     refcount.atomic_increment() 
     read some data 
     refcount.atomic_decrement() 
     refcount.atomic_decrement() 
    }) 

을 다른 스레드가 읽기 시작하기 전에 은퇴. 나는 버퍼에 데이터를 쓰는 동안 atomic 연산을 피하고 "여기에 뭔가를 할 수 있습니까?" 논평.

올바른 방법은 무엇입니까?

답변

0

신경 쓰지 마세요. 스레드 생성은 필요한 동기화를 수행합니다.