티스토리 뷰
간단한 동기 액세스를 행하기 위한 API
복수의 스레드가 공유하는 변수에 대해서의 동기 액세스를 간단하게 실시하기 위한 함수가 제공되고 있습니다. 변수의 값을 갱신할 때에 한 번에 하나의 스레드 밖에 그 갱신을 실시하지 않는 것을 보증합니다.
1 InterlockedIncrement
지정된 변수의 값을 인크리먼트(increment) 하고(하나 늘립니다), 그 결과 얻을 수 있던 값을 체크합니다.
LONG InterlockedIncrement( LPLONG lpAddend // 인크리먼트(increment) 해야 할 변수 ); |
|
lpAddend |
|
인크리먼트(increment) 되는 변수로의 포인터를 지정합니다. |
|
반환 값 |
|
인크리먼트(increment) 후의 값이 돌아갑니다. |
2 InterlockedDecrement
지정된 변수의 값을 감소 하여(하나 줄입니다), 그 결과 얻을 수 있던 값을 체크합니다.
LONG InterlockedDecrement( LPLONG lpAddend // 변수로의 포인터 ); |
|
lpAddend |
|
감소 되는 변수로의 포인터를 지정합니다. |
|
반환 값 |
|
감소 후의 값이 돌아갑니다. |
3 InterlockedExchange
지정된 변수의 내용과 또 하나의 값의 교환을 일괄 하여 실시합니다.
LONG InterlockedExchange( LPLONG Target, // 교환에 사용되는 변수 LONG Value // 새로운 값 ); |
|
Target |
|
값을 교환해야 할 변수로의 포인터를 지정합니다. 변수로부터 제어가 돌아가면 이 변수에 Value 파라미터로 지정한 값이 저장 됩니다. |
|
Value Target |
|
파라미터가 가리키는 변수에 저장해야 할 새로운 값을 지정합니다. |
|
반환 값 |
|
Target 파라미터가 가리키는 변수의 교환 전의 값이 반환 됩니다. |
4 InterlockedExchangeAdd
가수 변수로의 증분 치의 원자 가산을 실행합니다.
LONG InterlockedExchangeAdd ( PLONG Addend, // 가수로의 포인터 LONG Increment // 증분 치 ); |
|
Addend |
|
가수가 들어간 변수로의 포인터를 지정합니다. 이 값에Increment가 가산됩니다. |
|
Increment |
|
Addend가만 가리키는 변수에 가산하는 수를 지정합니다. |
|
반환 값 |
|
Addend가 가리키는 변수의 가산 전의 값이 반환 됩니다. |
5 Experiment 4: Non-blocking Data Structures
이 장에서는 Interlocked Singly Linked Lists(SLists)에 대해 설명합니다. 5.1 Interlocked Singly Linked ListsInterlocked Singly Linked Lists(SLists)에 의해서 linked list로의 삽입과 삭제를 간단하게 행할 수 있습니다. non-blocking 알고리즘을 이용하여 리스트로의 액세스의 동기를 잡습니다.
이하는 샘플 프로그램입니다. InitializeSListHead 함수에 의해서 SList를 초기화 하고 InterlockedPushEntrySList 함수에 의해서 항목을 10개 삽입합니다. InterlockedPopEntrySList 함수에 의해서 항목을 10개 없앱니다. 그리고 InterlockedFlushSList 함수에 의해서 리스트가 빈 것을 확인합니다.
5.1.1 InitializeSListHeadSList의 헤더를 초기화합니다.
5.1.2 InterlockedPushEntrySListSList의 선두에 항목을 추가합니다. 이 리스트로의 액세스는 동기가 취해 집니다.
5.1.3 InterlockedPopEntrySListSList의 선두로부터 항목을 꺼냅니다. 이 리스트로의 액세스는 동기가 취해집니다.
|
Using Singly Linked Lists
http://msdn.microsoft.com/en-us/library/ms686962(VS.85).aspx
'C++ > General' 카테고리의 다른 글
C++ Const 용법 정리 (4) | 2008.01.31 |
---|---|
오버로딩과 오버라이딩 (3) | 2008.01.22 |
시간 관련 함수 모음 (0) | 2008.01.17 |
오류의 원인 (0) | 2008.01.14 |
윈도우 가상 키 코드(Virtual Key Code)테이블 (0) | 2008.01.12 |
- Total
- Today
- Yesterday
- c언어
- 엘키
- 게임데브포에버
- SDL
- TraceRoute
- 게임개발포에버
- MS-SQL
- ftp
- svn
- EzShortcut
- 바로가기 프로그램
- 조엘 온 소프트웨어
- 루비 온 레일즈
- 리버스 엔지니어링
- NDC2013
- RoR
- Ruby on Rails
- 임백준
- SQLite Spy
- Rails
- 멀티스레드
- 디자인 패턴
- ruby
- 디버깅
- CppSQLite
- 루비
- EasyExec
- 좋은 프로그래머
- perfmon
- TDD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |