Skip to content
Snippets Groups Projects
Commit 7da74673 authored by 이소현's avatar 이소현
Browse files

Update README.md

parent e92f3846
No related branches found
No related tags found
No related merge requests found
...@@ -757,3 +757,88 @@ int main() ...@@ -757,3 +757,88 @@ int main()
printf("Thread return %d at the end\n", result1); printf("Thread return %d at the end\n", result1);
} }
``` ```
## lesson 14
* 사람들이 많이 이용중이던 unix에서 갑자기 소스코드를 닫고 바꾸었다. 그 뒤 bsc라는 것이 나왔고 ios의 기반이 되었다.
* 프리소스 운동 중 GNU에서도 unix와 같은 것을 만들었고 그것이 GNU의 공식 OS인 "LINUX"이다.
* unix계열 os를 쓰지 않으면 POSIX FIPS(연방계정)을 사용하지 못했다.
* ISO에서 현재 표준화를 했다. (JTC sc22 프로그래밍 랭귀지를 표준화)
* pthread 는 posix에서 만든 thread이다.
1. buffer
> * stack : LIFO 형태
> * 버퍼에서 뽑아가능 3가지 형태
> 1. buffer full : 버퍼가 꽉 차면 한번에 쏵 뽑아간다.
> 2. line by line mode : 한 줄씩 enter를 치면 뽑아간다.
> 3. zero buffer : buffer 사이즈가 0 또는 1로 설정하여 한 글자씩 뽑아가게 만든다.
> * 제일 중요한 표준 버퍼 stdio
> 1. stdin
> 2. stdout
> 3. stderr
>> * 리디렉션은 이러한 stdio들의 방향을 리디렉션 해주는 것이다.
* lec13 실습시간에 버퍼문제로 인해 a.out 이 실행이 잘 되지 않았고 \n을 넣어 버퍼문제를 해결했었는데, 이 것을 다른 방법으로 stdbuf를 이용하여 해결할 수 있다.
* buffer control 실행하면서 하기
>1. stdbuf --output=o a.out : zero buffer를 이용하여 lec13에서 만든 코드를 1초마다 내보내짐
>2. stdbuf --output=L a.out : line by line buffer이용
* 프로그램 안에서 버퍼를 짜는 방법
```C
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int bbb = 0;
void fn_s()
{
static int a = 0;
printf("== %d %d ==",a++, bbb++);
fflush(stdout);
}
void *run (void *arg)
{
printf("Hello world of POSIX threads.%d\n", (int) (0) );
for (int i = 0; i < 10; i++)
{
sleep(1);
fn_s();
}
return 0;
}
int main()
{
int result1;
char bufff[10];
setvbuf(stdout,bufff, _IONBF, 10);
run((void *) 0);
printf("Thread return %d at the end\n", result1);
}
```
* 위와 같이 코드를 작성하여 main에서 buffer 를 생성하여 _IONBF, 10 을 주어 내부에서 버퍼 설정이 가능하다.
* 바로 위의 코드와 같이 설정하고 밖에서 이중으로 $stdbuff --output=L a.out 등과 같이 명령 실행시에는 a.out이 이긴다. 즉, 코드에 짠것대로 나온다.
* 위의 코드에서
>* char bufff[10];
>* setvbuf(stdout,bufff, _IONBF, 10);
* 두 줄 대신 f flush(stdout); 을 해도 같은 결과가 나온다.
2. thread
>* thread를 여러개 만들어서 코어를 다 사용할 수 있게 한다면 훨씬 속도가 빨라진다. 하지만 쓰레드가 무조건 다 코어를 사용하는 것은 아니다.
3. 동기화 문제
>* 어떠한 코드에서 a++; 을 하는 중에 cpu에서 memory의 값을 자꾸 가져갔다 돌려주게 된다면 예를 들어 301후 +1은 302가 되어야 하는데 cpu때문에 300으로 다시 덮이는 등 동기화 문제가 발생하게 된다.
>* 이러한 동기화 문제는 mutex를 이용하여 해결한다.
```C
static pthread mutex_t mutex
= PTHREAD_MUTEX_INITIALIZER;
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment