본문 바로가기

[c++] std::async와 std::thread 사용하기 들어가기 이 글은 C++에서 비동기 전체를 다루지는 않는다. 이미 thread 작동 방식이나 사용에 대해서는 어느정도 알고 있다고 가정한다. std::thread와 std::async에 대한 간단한 사용법과 각 자원 해제시 주의점, 몇 가지 고려할 점을 정리했다. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 맛보기 비동기 처리에 있어서 std::thread와 std::async을 사용하는 방법이 있다. std::thread와 std::async은 결과는 같지만 실제 동작과 인터페이스가 조금씩 다르다. std::thread는 스레드 기반(thread-based) 프로그래밍이고 std::async는 과제 기반(task-based) 프로그래밍이다. std::t.. 더보기
쓰레드별 전역변수 사용하기 쓰레드별 전역변수 사용하기? 무슨말? 각각 쓰레드에서 같은 변수를 액세스하지만, 쓰레드 별로 서로 다른 값을 사용하는 형태입니다. 말이 정말 어렵습니다. 즉, 전역 변수로 total이 있고 쓰레드A와 쓰레드 B에서 같이 사용한다면 문제가 발생합니다. 각 쓰레드 내에서는 total만 가져오는 쓰레드 내에서만 계산된 값을 사용하려고합니다. 그렇게 한다면 전체 로직이 쓰레드 별 total를 구분(thread_a_total, thread_b_total)할 필요 없이 하나만 사용하기 때문에 로직도 깔끔해집니다. 그리고 쓰레드 간에 충돌도 없어지게 됩니다. 이렇게 해도 이해하기 어렵군요. 아무든 전역 변수가 프로세스 하나에서 공용으로 사용하지만, 쓰레드별 변수는 해당 쓰레드 내에서만 공용으로 사용하고 다른 쓰레드에.. 더보기
Java 쓰레드 간단한 코드 예제 아래 내용은 어느책에서 참고했던 건데 정확한 책 명칭이 생각이 안난다. 혹시 아시는 분이 계시면 메일이나 덧글을 달아주세요. ^^ http://ospace.tistory.com/(ospace114@empal.com) 2008.07.24 주의: 가져가실때에는 출처를 명시해주세요. 쓰레드 TIME-WAITING 상태로 들어가기 public class TestClass extends Thread { public TestClass() { new TestClass().start(); } public void run() { while(true) { sleep(100); // milliseconds } } } Enumerating Thread 단순히 쓰레드들을 생성하고 생성된 쓰레드에 대한 조회 public void.. 더보기
Java 쓰레드 상태 Java 쓰레드 상태 (http://ospace.tistory.com/(ospace114@empal.com)) 2008.07.24 주의: 가져가실때에는 출처를 명시해주세요. 아래 내용은 자바 쓰레드 상태 Greek Explains에 08년 7월 3일에 올라온 내용이다. 내용은 간략하지만 나름 대로 괜찮은 내용이라서 번역해서 정리해 올려봅니다. 자바에서 쓰레드 상태는 자바의 Thread내 State라는 static nated class 형태로 enumeration 형으로 정의되어 있다. 그래서 "Thread.State.NEW"형식으로 상태를 참조할 수 있다. 주의 할 것은 이 곳의 상태목록과 실제 운영체제의 상태목록과는 틀리다. 상태는 아래와 같이 총 6가지가 있다. NEW: 새로운 쓰레드로 아직 시작되지.. 더보기
Java thread에서 IllegalMonitorStateException 예외 발생문제 Java thread에서 IllegalMonitorStateException 예외 발생문제 작성자: ospace114 @ naver.컴(07.11.28) 자바는 개발자에게 상당히 편한 환경을 제공한다. 왠만한 기능들이 쉽게사용하도록 제공하기 때문이다. 그리고 상당히 많은 제약을 제공한다. 그중에서 쓰레드 사용에 있어서 제약사항중에 IllegalMonitorStateException 예외를 보도록 하겠다. 예외가 발생할 수 있는 상황은 매우많다. 그렇기에 특수한 상황일 경우에 대해서 살펴보겠다. 이번 예제는 ThreadA와 ThreadB가 있고 ThreadB가 ThreadA에서 메시지 처리 요청을 보내는 상황이다. 이를 코드로 구현하면 다음과 같다. import java.util.Vector; public.. 더보기
Win32 쓰레드에서 동기화 방법 아래 내용은 인터넷에서 가져온것인데... 원 저작자를 모르겠다. 여러 동기화 방법에 대해서 이야기한 것이면 문제에 대해서 다루고 있지 않다. 동기화 방법으로 Interlock, CriticalSection, Mutex, Semaphore 등이 있다. 크리티컬 섹션 void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);크리티컬 섹션을 초기화한다. 여기 들어가는 인자는 여러개의 스레드에 참조가 되야 하므로 주로 전역에서 쓰인다. void DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection);생성된 크리티컬 섹션을 삭제한다. CRITICAL_SECTION 구조체는 구체적으로 사용할 일이 .. 더보기

반응형