>  기사  >  운영 및 유지보수  >  Linux 잠금 없는 예제에 대한 자세한 설명

Linux 잠금 없는 예제에 대한 자세한 설명

零下一度
零下一度원래의
2017-07-03 15:47:451281검색

linux에서 지원하는 작업은 원자성입니까? 이러한 사실을 아는 것이 잠금 없는 프로그래밍 알고리즘을 이해하고 설계하기 위한 기초입니다.

다음 내용은 인터넷에서 정리한 것입니다. 공유해 주셔서 미리 감사드립니다!

sync_fetch_and_add 명령 시리즈. 영어를 잘하는 학생들은 원문으로 바로 이동할 수 있습니다. 멀티스레드 단순 데이터 유형 액세스 및 원자 변수

sync_fetch_and_add 시리즈에는 이름에서 알 수 있듯이 더하기/빼기/및/또는/배타적 또는/등 원자 연산 함수인 sync_fetch_and_add를 포함하여 총 12개의 함수가 있습니다. , 그런 다음 자체적으로 증가하고 증가하기 전의 값을 반환합니다. count = 4를 예로 들면, sync_fetch_and_add(&count,1)을 호출한 후 반환 값은 4가 되고, 그 다음에는 count가 5가 됩니다.
sync_fetch_and_add가 있고 당연히 sync_add_and_fetch가 있다는 뜻이죠. lot 분명합니다. 먼저 직접 추가한 다음 반환하세요. 두 형제의 관계는 i++와 ++i의 관계와 같습니다. 탄하오창(Tan Haoqiang)에게 성폭행을 당했거나 어른들로부터 보호비를 받은 적이 있는 사람이라면 누구나 이 사실을 분명히 알 것입니다.
이 아기 기능으로 우리는 새로운 솔루션을 갖게 되었습니다. 다중 스레드에서 전역 변수를 자체 증가시키려면 더 이상 스레드 잠금을 처리할 필요가 없습니다. 다음 코드 줄은 위의 pthread_mutex로 보호되는 코드 줄과 동일한 효과를 가지며 스레드로부터 안전합니다.

sync_fetch_and_add( &global_int, 1 );

다음은 이 기능 그룹의 가족 초상화입니다. 해당 기능의 이름을 보면 알 수 있습니다.

gcc로 컴파일할 때 -march=i686

// sam:在我的服务器上,发现不加都可以。
type sync_fetch_and_add (type *ptr, type value);type sync_fetch_and_sub (type *ptr, type value);type sync_fetch_and_or (type *ptr, type value);type sync_fetch_and_and (type *ptr, type value);type sync_fetch_and_xor (type *ptr, type value);type sync_fetch_and_nand (type *ptr, type value);type sync_add_and_fetch (type *ptr, type value);type sync_sub_and_fetch (type *ptr, type value);type sync_or_and_fetch (type *ptr, type value);type sync_and_and_fetch (type *ptr, type value);type sync_xor_and_fetch (type *ptr, type value);type sync_nand_and_fetch (type *ptr, type value);

// Sam: 왜 끝에 줄임표가 있는지 정말 헷갈립니다. 우리가 신경 쓸 필요가 없는 것? 사용할 때 매개변수를 전달할 필요가 없나요? 다음 두 가지 기능이 바로 제가 원하는 기능이며, mutex lock 기능을 쉽게 구현할 수 있습니다.

bool sync_bool_compare_and_swap (type*ptr, type oldval, type newval, ...)

type sync_val_compare_and_swap (type *ptr, type oldval, type newval, ...)
이 두 함수는 원자 비교를 제공합니다. 그리고 교환, *ptr == oldval이면 *ptr에 newval을 씁니다.
첫 번째 함수는 동일하고 쓰여지면 true를 반환합니다.
두 번째 함수는 연산 값보다 먼저 반환됩니다.

sync_synchronize (...)

위 내용을 이해하려면 blog.sunchangming.com/post/47188394133

두 가지 기능도 있습니다.
type sync_lock_test_and_set(*ptr, type value, ...)
*ptr을 value로 설정하고 *ptr 연산 이전의 값을 반환합니다.
void sync_lock_release(*ptr, ... 입력)
*ptr을 0
으로 설정

위 내용은 Linux 잠금 없는 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.