4바이트 를 atomic하게 업데이트를 어떻게 하나요?

yeilho의 이미지

char array가 있는데 이중에 일부 4 바이트를 atomic하게 업데이트 하고 싶습니다.

__sync_bool_compare_and_swap() 를 사용할려구 했는데, 제가 업데이트가 하고자 하는 부분이 char 어레이라서 그런지 아래처럼 했는데 잘 안되네요.... :(

char target[20];
char _old[4], _new[4];
 
...
 
memcpy(_old, target, 4);
 
if (!__sync_bool_compare_and_swap(target, _old, _new)) {
    printf("cas failed\n");
}

조언 부탁드립니다.

yeilho의 이미지

제 질문에 답변 답니다. ;)

사이즈를 지정해 주지 않아서 문제 였던것 같습니다.

코드를 아래 처럼 바꾸어주니 잘 되네요.

if (!__sync_bool_compare_and_swap((int *)target, *(int *)target, *(int *)_new)) {
printf("cas failed\n");
}

Linux rules!!!

Linux rules!!!