Академический Документы
Профессиональный Документы
Культура Документы
Задание
Ход работы
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <iostream>
#include <sys/errno.h>
#include <pthread.h>
#include <signal.h>
#include <sys/time.h>
#include <time.h>
#include <map>
Лист
Лабораторная работа №5 ТОГУ, ИС-51, Храмцов А.А.
по Системному ПО 1
using namespace std;
struct CustomCondTimedWait_Data
{
timer_t RelatedTimerAddress;
bool UnlockedByTimer = false;
};
struct CustomMutexTryLock_Data
{
pthread_mutex_t *RelatedMutex = nullptr;
bool IsGoingToGetLocked = false;
};
pthread_mutex_t Mutex;
auto it = MutexToRelatedMutexData.find(MutexToInitialize);
if (it == MutexToRelatedMutexData.end())
{
CustomMutexTryLock_Data *MutexData = new CustomMutexTryLock_Data;
MutexData->IsGoingToGetLocked = false;
MutexData->RelatedMutex = new pthread_mutex_t;
*MutexData->RelatedMutex = PTHREAD_MUTEX_INITIALIZER;
MutexToRelatedMutexData.insert(pair<pthread_mutex_t *, CustomMutexTryLock_Data
*>(MutexToInitialize, MutexData));
}
}
// Set up timer
TimerEvent.sigev_notify = SIGEV_SIGNAL;
TimerEvent.sigev_signo = SignamNumber;
TimerEvent.sigev_value.sival_ptr = Value;
timer_t TimerAddress;
if (timer_create(CLOCK_REALTIME, &TimerEvent, &TimerAddress) == -1)
return nullptr;
//Setting only current value (interval stays at 0) for timer to trigger once.
//Getting Seconds
TimerIntervals.it_value.tv_sec = Interval_InMilliSeconds / 1000000;
//And Remainder In Milliseconds
TimerIntervals.it_value.tv_nsec = Interval_InMilliSeconds % 1000000;
TimerIntervals.it_interval.tv_sec = 0;
TimerIntervals.it_interval.tv_nsec = 0;
return TimerAddress;
}
Результаты работы:
Лист
Лабораторная работа №5 ТОГУ, ИС-51, Храмцов А.А.
по Системному ПО 8
Результат работы программы. Попытки заблокировать мьютекс:
Лист
Лабораторная работа №5 ТОГУ, ИС-51, Храмцов А.А.
по Системному ПО 9