I never thought philosophy would be so deadly
-
gettimeofday
:- Эта функция используется для получения текущего времени с микросекундной точностью.
- Синтаксис:
int gettimeofday(struct timeval *tv, struct timezone *tz);
- Аргументы:
tv
— структура, которая содержит секунды и микросекунды с момента эпохи (01.01.1970).tz
— может быть передан какNULL
, так как это устаревший параметр, и его обычно не используют.
- Возвращает 0 в случае успеха и -1 в случае ошибки.
Пример использования:
struct timeval tv; gettimeofday(&tv, NULL); printf("Seconds: %ld, Microseconds: %ld\n", tv.tv_sec, tv.tv_usec);
-
pthread_create
:- Эта функция создает новый поток выполнения (thread).
- Синтаксис:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
- Аргументы:
thread
— указатель на переменную типаpthread_t
, в которую будет записан идентификатор созданного потока.attr
— атрибуты создаваемого потока, можно передатьNULL
для атрибутов по умолчанию.start_routine
— функция, которая будет выполняться в потоке.arg
— аргумент, который передается в функциюstart_routine
.
- Возвращает 0 в случае успеха и код ошибки в случае неудачи.
-
pthread_detach
:- Эта функция переводит поток в "отсоединенное" состояние, что позволяет системе автоматически освободить его ресурсы после завершения.
- Синтаксис:
int pthread_detach(pthread_t thread);
- Аргументы:
thread
— идентификатор потока.
- Возвращает 0 в случае успеха и код ошибки в случае неудачи.
Используется, когда вы не хотите ожидать завершения потока через
pthread_join
. -
pthread_join
:- Эта функция приостанавливает выполнение текущего потока до тех пор, пока указанный поток не завершится.
- Синтаксис:
int pthread_join(pthread_t thread, void **retval);
- Аргументы:
thread
— идентификатор потока, завершения которого ожидаем.retval
— указатель на переменную, куда будет записано возвращаемое значение потока. Если это значение не нужно, можно передатьNULL
.
- Возвращает 0 в случае успеха и код ошибки в случае неудачи.
-
pthread_mutex_init
:- Инициализирует мьютекс (mutex), который служит для синхронизации потоков.
- Синтаксис:
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
- Аргументы:
mutex
— указатель на мьютекс.attr
— атрибуты мьютекса, можно передатьNULL
для атрибутов по умолчанию.
- Возвращает 0 в случае успеха и код ошибки в случае неудачи.
-
pthread_mutex_destroy
:- Освобождает ресурсы, занятые мьютексом.
- Синтаксис:
int pthread_mutex_destroy(pthread_mutex_t *mutex);
- Аргументы:
mutex
— указатель на мьютекс, который нужно уничтожить.
- Возвращает 0 в случае успеха и код ошибки в случае неудачи.
-
pthread_mutex_lock
:- Блокирует мьютекс. Если мьютекс уже заблокирован другим потоком, текущий поток будет ждать, пока мьютекс не станет доступным.
- Синтаксис:
int pthread_mutex_lock(pthread_mutex_t *mutex);
- Аргументы:
mutex
— указатель на мьютекс.
- Возвращает 0 в случае успеха и код ошибки в случае неудачи.
-
pthread_mutex_unlock
:- Разблокирует ранее заблокированный мьютекс.
- Синтаксис:
int pthread_mutex_unlock(pthread_mutex_t *mutex);
- Аргументы:
mutex
— указатель на мьютекс.
- Возвращает 0 в случае успеха и код ошибки в случае неудачи.
https://medium.com/@ridwaneelfilali/philosophers-the-dinning-problem-8ea3c0fc8cc7