C 언어로 lock-free 구현이 가능하겠지요?

gurugio의 이미지

요즘 lock-free나 thread-safety 관련 자료들을 찾아보고 있습니다.
제가 본 자료들은 대부분 Compare-And-Swap을 써서, 정보를 수정해주는 방식으로
쓰레드간에 병행성을 구현하고 있었습니다.

그런데 CAS 연산은 lock이 아닌건가요?
CAS연산도 값을 갱신하기 위해 비교하고 루프를 도는 동작에 사용되면,
결국 lock과 정보가 하나로 합쳐진 일종의 lock이 되는게 아닌가 하는 생각이 듭니다.

wait-free의 정의(n algorithm is wait-free if every operation has a bound on the number of steps the algorithm will take before the operation completes)를 생각해봐도
CAS가 사용될때 finite한 연산만 실행된다는 보장이 없으니wait-free가 안되는것 같구요.

lock-free라고 하면 CAS도 없이 그냥 쓰레드 하나가 실행될때의 코드가 그대로 실행되는게 가장 이상적일것 같은데
그게 C 언어로 가능한지도 의문이 듭니다.
만약 C언어로 병행성 구현에 한계가 보여진다면
C 언어의 스펙을 바꾸거나 또다른 시스템 프로그래밍 언어로 갈아타야 되는게 아닌가 생각이 듭니다.
C++에서도 병행성을 위한 언어 스펙이나 라이브러리 연구가 많던데
C에서는 parallel을 위한 라이브러리는 봤지만 concurrency에 대해서는 잘 찾질 못했습니다.

자신도 이해를 못하는걸 쓰려다보니 이상한 글이 되버렸습니다..

tj의 이미지

언어와 별 상관은 없습니다. 어차피 언어에 그런 로우레벨 동기화 기능이 포함되어있는 것도 아니구요. atomic op사용하면서 lockless라고 하는 것들은 락쓰는거와 비교해서 비용이 크게 차이나진 않아서 대단한 의미는 없습니다. RCU가 꽤 여러모로 쓸모가 있고 오퍼레이션을 아예 cpu별로 나눠서 로컬로 처리하거나 가끔씩 모아주거나 하는 방식도 괜찮습니다.