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 연산을 피하고 "여기에 뭔가를 할 수 있습니까?" 논평.
올바른 방법은 무엇입니까?