/42_Prague_Philosophers

I never thought philosophy would be so deadly

Primary LanguageC

42_Prague_Philosophers

I never thought philosophy would be so deadly

  1. 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);
  2. 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 в случае успеха и код ошибки в случае неудачи.
  3. pthread_detach:

    • Эта функция переводит поток в "отсоединенное" состояние, что позволяет системе автоматически освободить его ресурсы после завершения.
    • Синтаксис: int pthread_detach(pthread_t thread);
    • Аргументы:
      • thread — идентификатор потока.
    • Возвращает 0 в случае успеха и код ошибки в случае неудачи.

    Используется, когда вы не хотите ожидать завершения потока через pthread_join.

  4. pthread_join:

    • Эта функция приостанавливает выполнение текущего потока до тех пор, пока указанный поток не завершится.
    • Синтаксис: int pthread_join(pthread_t thread, void **retval);
    • Аргументы:
      • thread — идентификатор потока, завершения которого ожидаем.
      • retval — указатель на переменную, куда будет записано возвращаемое значение потока. Если это значение не нужно, можно передать NULL.
    • Возвращает 0 в случае успеха и код ошибки в случае неудачи.
  5. pthread_mutex_init:

    • Инициализирует мьютекс (mutex), который служит для синхронизации потоков.
    • Синтаксис: int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
    • Аргументы:
      • mutex — указатель на мьютекс.
      • attr — атрибуты мьютекса, можно передать NULL для атрибутов по умолчанию.
    • Возвращает 0 в случае успеха и код ошибки в случае неудачи.
  6. pthread_mutex_destroy:

    • Освобождает ресурсы, занятые мьютексом.
    • Синтаксис: int pthread_mutex_destroy(pthread_mutex_t *mutex);
    • Аргументы:
      • mutex — указатель на мьютекс, который нужно уничтожить.
    • Возвращает 0 в случае успеха и код ошибки в случае неудачи.
  7. pthread_mutex_lock:

    • Блокирует мьютекс. Если мьютекс уже заблокирован другим потоком, текущий поток будет ждать, пока мьютекс не станет доступным.
    • Синтаксис: int pthread_mutex_lock(pthread_mutex_t *mutex);
    • Аргументы:
      • mutex — указатель на мьютекс.
    • Возвращает 0 в случае успеха и код ошибки в случае неудачи.
  8. pthread_mutex_unlock:

    • Разблокирует ранее заблокированный мьютекс.
    • Синтаксис: int pthread_mutex_unlock(pthread_mutex_t *mutex);
    • Аргументы:
      • mutex — указатель на мьютекс.
    • Возвращает 0 в случае успеха и код ошибки в случае неудачи.

https://medium.com/@ridwaneelfilali/philosophers-the-dinning-problem-8ea3c0fc8cc7