Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
pcc022
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
이소현
pcc022
Commits
7da74673
Commit
7da74673
authored
3 years ago
by
이소현
Browse files
Options
Downloads
Patches
Plain Diff
Update README.md
parent
e92f3846
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
README.md
+85
-0
85 additions, 0 deletions
README.md
with
85 additions
and
0 deletions
README.md
+
85
−
0
View file @
7da74673
...
@@ -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;
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment