You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
4.0 KiB
103 lines
4.0 KiB
/*
|
|
* Copyright 2002-2019 Intel Corporation.
|
|
*
|
|
* This software is provided to you as Sample Source Code as defined in the accompanying
|
|
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
|
|
* section 1.L.
|
|
*
|
|
* This software and the related documents are provided as is, with no express or implied
|
|
* warranties, other than those that are expressly stated in the License.
|
|
*/
|
|
|
|
/*
|
|
* This is an thread utilities file which supplies a generic API for all supported OSs.
|
|
* The OS-specific implementation is in the corresponding threadUtils_<X>.cpp where <X>
|
|
* is the first letter (lower case) of the OS name e.g. "threadUtils_l" for Linux.
|
|
*/
|
|
|
|
#ifndef THREAD_FINI_UTILS_H
|
|
#define THREAD_FINI_UTILS_H
|
|
|
|
#if defined(TARGET_WINDOWS)
|
|
#include <Windows.h>
|
|
typedef DWORD TidType;
|
|
#define EXPORT_SYM __declspec( dllexport )
|
|
|
|
#elif defined (TARGET_LINUX)
|
|
#include <pthread.h>
|
|
typedef pthread_t TidType;
|
|
#define EXPORT_SYM
|
|
|
|
#endif // OS type
|
|
|
|
#include <string>
|
|
|
|
|
|
using std::string;
|
|
|
|
const unsigned int TIMEOUT=600; //10 minutes
|
|
|
|
/**************************************************
|
|
* Results *
|
|
**************************************************/
|
|
enum Results {
|
|
RES_SUCCESS = 0, // 0
|
|
RES_INIT_FAILED, // 1
|
|
RES_CREATE_FAILED, // 2
|
|
RES_LOCK_FAILED, // 3
|
|
RES_UNLOCK_FAILED, // 4
|
|
RES_CANCEL_FAILED, // 5
|
|
RES_JOIN_FAILED, // 6
|
|
RES_INVALID_ARGS, // 7
|
|
RES_UNKNOWN_OPTION, // 8
|
|
RES_EXIT_TIMEOUT, // 9
|
|
RES_CLONE_LOOP_FAILED, // 10
|
|
RES_UNEXPECTED_EXIT, // 11
|
|
RES_FORK_FAILED, // 12
|
|
RES_EXECV_FAILED, // 13
|
|
RES_EXIT_FAILED // 14
|
|
};
|
|
|
|
|
|
/**************************************************
|
|
* Error strings *
|
|
**************************************************/
|
|
const string errorStrings[] = { "success", // 0
|
|
"lock init failed", // 1
|
|
"thread creation failed", // 2
|
|
"lock failed", // 3
|
|
"unlock failed", // 4
|
|
"thread cancel failed", // 5
|
|
"thread join failed", // 6
|
|
"invalid number of args received", // 7
|
|
"unknown arg received", // 8
|
|
"the WAIT thread's timeout was reached", // 9
|
|
"thread creation failed in clone loop", // 10
|
|
"thread creation loop was terminated for an unknown reason", // 11
|
|
"fork failed", // 12
|
|
"execv failed", // 13
|
|
"the tool failed to terminate the application" // 14
|
|
};
|
|
|
|
|
|
/**************************************************
|
|
* Function declarations *
|
|
**************************************************/
|
|
unsigned int GetTid();
|
|
void InitLocks();
|
|
bool CreateNewThread(TidType* tid, void* func, void* info);
|
|
void CancelThread(TidType tid);
|
|
void WaitForThread(TidType tid);
|
|
void ThreadExit();
|
|
void IncThreads();
|
|
void DecThreads();
|
|
int NumOfThreads();
|
|
void Print(const string& str);
|
|
void ErrorExit(Results res);
|
|
void SetTimeout();
|
|
void DoSleep(unsigned int seconds);
|
|
void DoYield();
|
|
void EnterSafeCancellationPoint();
|
|
|
|
#endif // THREAD_FINI_UTILS_H
|