... | @@ -72,7 +72,7 @@ Main Thread End |
... | @@ -72,7 +72,7 @@ Main Thread End |
|
```
|
|
```
|
|
|
|
|
|
### **Monitor**
|
|
### **Monitor**
|
|
**Monitor**는 임의의 객체를 잠금으로써 특정 코드의 접근을 막는 기능을 가지고 있다. 여러 Thread가 하나의 공유자원을 동시에 사용하면 문제가 발생하는데 **Monitor**를 통해 하나의 Thread에서만 공유자원을 사용할 수 있도록 함으로써 Thread를 동기화할 수 있다.
|
|
**Monitor**는 임의의 객체를 잠금으로써 특정 코드의 접근을 막는 기능을 가지고 있다. 여러 Thread가 하나의 공유자원을 동시에 사용하면 문제가 발생하는데 **Monitor**를 통해 하나의 Thread에서만 공유자원을 사용할 수 있도록 하여 Thread를 동기화할 수 있다.
|
|
|
|
|
|
```
|
|
```
|
|
static void Main()
|
|
static void Main()
|
... | @@ -358,7 +358,8 @@ Task timeoutTask = Task.Delay(timeoutMillis); |
... | @@ -358,7 +358,8 @@ Task timeoutTask = Task.Delay(timeoutMillis); |
|
```
|
|
```
|
|
result = await Task.Factory.ContinueWhenAny<bool>(new Task[] { cmdTask, timeoutTask }, (completedTask) => { /* 내용 */ });
|
|
result = await Task.Factory.ContinueWhenAny<bool>(new Task[] { cmdTask, timeoutTask }, (completedTask) => { /* 내용 */ });
|
|
```
|
|
```
|
|
* cmdTask와 timeoutTask를 동시에 실행하여 먼저 끝난 Task를 Func Delegate의 매개변수인 completedTask에 넘긴 후 Task를 실행한다. `await`를 사용했으므로 이 모든 Task는 비동기로 처리되고, Task의 반환 값은 result에 저장한다.
|
|
* cmdTask와 timeoutTask를 동시에 실행하여 먼저 끝난 Task를 Func Delegate의 매개변수인 completedTask에 넘긴 후 Task를 실행한다.
|
|
|
|
* `await`를 사용했으므로 이 모든 Task는 비동기로 처리되고, Task의 반환 값은 result에 저장한다.
|
|
* Task.Factory.ContinueWhenAny()와 관련된 내용과 예제를 설명 하단에 추가하였다.
|
|
* Task.Factory.ContinueWhenAny()와 관련된 내용과 예제를 설명 하단에 추가하였다.
|
|
|
|
|
|
```
|
|
```
|
... | @@ -747,7 +748,7 @@ int sessID; |
... | @@ -747,7 +748,7 @@ int sessID; |
|
int userTag;
|
|
int userTag;
|
|
int bodyLength;
|
|
int bodyLength;
|
|
```
|
|
```
|
|
* PDU의 Header 정보를 각각 저장할 변수를 선언한다.
|
|
* PDU의 Header 정보를 저장할 각각의 변수를 선언한다.
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
... | | ... | |