42seoul/projects
[Philosophers] ์ฌ์ฉ ํจ์ ์ ๋ฆฌ
moaoh
2021. 9. 3. 23:22
memset
# include <string.h>
void * memset ( void * ptr, int value, size_t num );
๋ฉ๋ชจ๋ฆฌํ๋๋ฅผ ์ํ๋ value๋ก ์ ๋ถ ์ด๊ธฐํ.
printf
# include <stdio.h>
int printf(const char* format, ...);
์ํ๋ ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ ํจ์.
malloc
# include <stdlib.h>
void * malloc(size_t size);
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น.
free
# include <stdlib.h>
void free(void *ptr);
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ .
write
# include <unistd.h>
ssize_t write(int fd, const void *buf, size_t nbyte);
fd : ํ์ผ ์ ์ก์์ญ.
*buf : ์ ์กํ ๋ฐ์ดํฐ.
nbyte : ์ ์กํ ๋ฐ์ดํฐ์ ํฌ๊ธฐ.
usleep
# include <unistd.h>
void sleep( unsigned long useconds);
์ฝ๋์ ์คํ์ ๋ฆ์ถค.
useconds : ๋๊ธฐํ๋ ์๊ฐ (๋ง์ดํฌ๋ก์ด) 1์ด : (1000 * 1000)
gettimeofday
# include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
ํ์ฌ ์๊ฐ์ ๊ฐ์ ธ์ค๊ณ ์์คํ
์ ์๊ฐ๊ฐ์ ์ค์ ํ๋ค.
tv : ํ์ฌ์ ์๊ฐ์ ๊ฐ์ ธ์จ๋ค.
struct timeval
{
long tv_sec; // ์ด
long tv_usec; // ๋ง์ดํฌ๋ก์ด
}
tz : ๊ฑฐ์ ์ฌ์ฉํ์ง์์. NULL ๋ก ๋๊ณ ์ฌ์ฉ
struct timezone
{
int tz_minuteswest: // ๊ทธ๋ฆฌ๋์น ์์ธก๋ถ์ฐจ
int tz_dsttime // DST ๋ณด์ ํ์
(์ผ๊ด ์ ์ฝ์๊ฐ)
}
pthread_create
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg);
์ค๋ ๋๋ฅผ ์์ฑ.
๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ ๋๊ฐ ์ข
๋ฃ๋๋๋ผ๋ ์ฌ์ฉํ๋ ์์์ ํด์ ๋์ง์๋๋ค.
thread : ์ค๋ ๋ ์๋ณ๋ฒํธ๋ฅผ ์ ์ฅ.
attr : ์ค๋ ๋์ ๊ด๋ จ๋ ํน์ฑ์ ์ง์ . ( NULL๋ก ํ๊ฒฝ์ฐ ๊ธฐ๋ณธํน์ฑ์ผ๋ก ์ง์ )
start_routine : ๋ถ๊ธฐ์์ผ์ ์คํํ ์ค๋ ๋ ํจ์.
arg : ์ฐ๋ ๋ ํจ์์ ์ธ์.
return : ( ์ฑ๊ณต์ 0, ์คํจ์ error_code )
pthread_detach
#include <pthread.h>
int pthread_detach( pthread_t th_id );
์ค๋ ๋๋ฅผ ๋ถ๋ฆฌ. ์ค๋ ๋๊ฐ ์ข
๋ฃ๋ ๋ ๋ชจ๋ ์์์ ํด์ .
th_id : ๋ถ๋ฆฌ์ํฌ ์ค๋ ๋ ์๋ณ์.
return : ( ์ฑ๊ณต์ 0, ์คํจ์ error_code )
pthread_join
#include <pthread.h>
int pthread_join(pthread_t thread, void **value_ptr);
return : ( ์ฑ๊ณต์ 0, ์คํจ์ error_code )
ํน์ pthread๊ฐ ์ข
๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ํน์ pthread๊ฐ ์ข
๋ฃ์ ์์ ํด์
thread : ์ค๋ ๋ ์๋ณ์.
value_ptr : pthread์ return๊ฐ ( ํฌ์ธํฐ๋ก ๋ฐํ ) ( ์ค๋ ๋ ์๋ณ๋ฒํธ )
pthread_mutex_init
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex,
const pthread_mutexattr_t *attr);
๋ฎคํ
์ค๋ฅผ ์์ฑ.
๋ฎคํ
์ค ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ์ํค๊ธฐ ์ํด์ ์ฌ์ฉ.
mutex : ์ด๊ธฐํ ์ํฌ ๋ฎคํ
์ค ๊ฐ์ฒด.
attr : ๋ฎคํ
์ค์ ํน์ง. ( NULL๋ก ํ๊ฒฝ์ฐ ๊ธฐ๋ณธํน์ง์ผ๋ก ์ง์ )
return : ( ์ฑ๊ณตํ ๊ฒฝ์ฐ 0์ ์คํจํ์๊ฒฝ์ฐ์๋ -1์ ๋ฐํ )
**EINVAL**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด mutex๊ฐ NULL์ด๋ค.
**EBUSY**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด mutex์ ์ด๋ฏธ ์ด๊ธฐํ๋์๋ค.
**EINVAL**
์ง์ ํ ๋ฎคํ
์ค ์์ฑ ๊ฐ์ฒด attr์ ์ด๊ธฐํ๋์ง ์์๋ค.
pthread_mutex_destroy
#include <pthread.h>
int pthread_mutex_destroy(pthread_mutex_t *mutex);
๋ฎคํ
์ค๋ฅผ ์๋ฉธ.
mutex : ์๋ฉธ์ํฌ ๋ฎคํ
์ค.
return : ( ์ฑ๊ณต์ 0, ์คํจ์ error_code )
**EINVAL**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด mutex์ ์ ํจํ์ง ์๋ค.
**EBUSY**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด๋ ๋ค๋ฅธ ์ค๋ ๋์ ์ํด ์ ๊ฒจ์๋ค.
pthread_mutex_lock
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
๋ฎคํ
์ค๋ฅผ ์ ๊ธ.
mutex : ์ ๊ธ ๋ฎคํ
์ค.
return : ( ์ฑ๊ณต์ 0, ์คํจ์ error_code )
**EINVAL**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด mutex๊ฐ NULL์ด๊ฑฐ๋ ์ ํจํ ๋ฎคํ
์ค ๊ฐ์ฒด๊ฐ ์๋๋ค.
**EINVAL**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด mutex์ด PTHREAD_PRIO_PROTECT ์์ฑ ๊ฐ์ ๊ฐ์ง๊ณ ์๊ณ ,
ํธ์ถํ ์ค๋ ๋์ ์ฐ์ ์์๊ฐ ๋ฎคํ
์ค์ ์ํ ์ฐ์ ์์๋ณด๋ค ํฌ๋ค.
**EDEADLK**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด์์ ๋ฐ๋๋ฝ ์กฐ๊ฑด์ด ๋ฐ์ํ์๋ค.
**EAGAIN**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด์์ ์ฌ์ ๊ธ ํ์๋ฅผ ์ด๊ณผํ์๋ค.
pthread_mutex_unlock
#include <pthread.h>
int pthread_mutex_unlock(pthread_mutex_t *mutex);
์ ๊ธด ๋ฎคํ
์ค๋ฅผ ํด์ .
mutex : ํด์ ์ํฌ ๋ฎคํ
์ค.
return : ( ์ฑ๊ณต์ 0, ์คํจ์ error_code )
**EINVAL**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด mutex๊ฐ NULL์ด๊ฑฐ๋ ์ ํจํ ๋ฎคํ
์ค ๊ฐ์ฒด๊ฐ ์๋๋ค.
**EPERM**
์ง์ ํ ๋ฎคํ
์ค ๊ฐ์ฒด๋ ํธ์ถํ ์ค๋ ๋์ ์ํด ์ ๊ธฐ์ง ์์๋ค.