lock-free

    2

    2답변

    http://www.boyet.com/articles/LockfreeQueue.html을 기반으로 비교 및 ​​교체를 사용하여 C에서 잠금 해제 대기열을 구현했습니다. 잘 작동하지만이 큐를 구현 한 락 프리 건너 뛰기 목록에 통합하려고합니다. 건너 뛰기 목록을 우선 순위 큐로 사용하고 있으며 우선 순위 충돌이있을 때 각 노드 내부의 잠금없는 큐를 사용하여

    4

    2답변

    짧은 버전 : 나는 표준 : here에서 잠금 무료, 단일 생산자, 단일 소비자 큐의 구현에 사용 된 C++ (11)에서 원자를 대체하기 위해 노력하고있어. 이것을 boost::atomic으로 바꾸려면 어떻게해야합니까? 긴 버전 : 나는 작업자 스레드와 함께 우리의 응용 프로그램에서 더 나은 성능을 얻기 위해 노력하고있어. 각 스레드는 자체 작업 큐를 가지

    0

    1답변

    fetch_add는 모두를 지원하는 CPU의 CAS 루프에 대해 win (게시 의견 참조) 인 것 같습니다. 비트를 설정하기 위해 클리어 비트를 토글 할 때 비트 연산 또는 더하기 연산을 사용할 수 있습니다. 결과는 동일합니다. 나는 각각에 대한 성과가 같을 것이라고 기대한다. 따라서 어떤 연산을 사용할 것인지 결정하는 것은 하드웨어 지원의 차이에 달려 있

    1

    1답변

    이 개체 풀이 여러 스레드에서 가시성 문제를 일으킬 수 있습니까? 내가 특별히 실행 순서의이 종류에 대해 궁금 해요 : 스레드 A - obtainObject()를 스레드 A가 - releaseObject() - 객체 수정 스레드 A (visibleState = 42라고 할 수 있습니다) 스레드 B - 관련이없는 무언가를하거나 스레드 B 다이 - - 객체를

    10

    2답변

    나는 Clojure 퀘스트 (4clojure.com에서 해결 된 약 80 가지 문제)를 진행 중이며 계속 읽고 읽고 코딩하고 "얻으려고"노력하고 있습니다. 이제 Clojure가 "잠금이없는 동시성"을 위해 설계 되었기 때문에 다소 혼란 스럽습니다. 교착 상태에 대해 너무 잘 알고 있습니다. ("교착 상태에 빠진 Java 코드를 작성했습니다" ""의 이 아닙

    2

    3답변

    이런 구조를 상상해가 struct my_struct** table; my_struct* my_struct_lookup(const char* name) { my_struct* s = table[hash(name)]; /* EDIT: Race condition here. */ atomic_inc(&s->refs);

    10

    2답변

    16 바이트를 원자 적으로 읽고 쓸 필요가 있습니다. 필자는 cmpxchg16을 사용하여서만 작업을합니다.이 작업은 하나의 모호한 AMD 프로세서를 제외하고 모든 x64 프로세서에서 사용할 수 있습니다. 이제 16 비트의 정렬 된 값에 대해서만 질문합니다. 전체 메모리 장벽처럼 작동하는 cmpxchg16을 사용하여 수정 한 경우 이전 절반의 데이터와 절반의

    0

    2답변

    이중 자유 연결 이중 목록에 대한 많은 연구가 있습니다. 마찬가지로, 잠금없는 건너 뛰기 목록에 대한 많은 연구가 있습니다. 그러나 내가 말할 수있는 최선의 방법은 아무도 잠금이없는 이중 링크 된 건너 뛰기 목록을 관리하지 않았다는 것입니다. 누구도 그 반대의 연구를 알고 있습니까? 그렇지 않은 이유는 무엇입니까? 편집 : 특정 시나리오는 빠른 분위 (50

    4

    1답변

    부스트 lockfree 라이브러리를 사용하려고했습니다. 그러나 템플릿 정의 매개 변수를 사용자 정의 유형으로 설정하면 오류 invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’이 발생합니다. 해결할 문제가 있습니까? typedef struct TM

    4

    2답변

    나는 std::atomic<u32> _start; std::atomic<u32> _end; 가 가끔 시작하거나 교환을 비교로 끝나는 설정할 부호 INT32의 쌍을, 그래서 전체 64 비트 쌍에 CAS를 사용하여 발생할 수 스퓨리어스 실패를 원하지 않는다. 32 비트 CAS를 사용하고 싶습니다. _end.compare_exchange_strong(old