99 _threadnumber = (int)(uintptr_t)
threadnum;
231 SCIP_Bool blockwhenfull
241 (*thrdpool)->currentid = 0;
242 (*thrdpool)->queuesize =
qsize;
243 (*thrdpool)->nthreads = nthreads;
244 (*thrdpool)->blockwhenfull = blockwhenfull;
245 (*thrdpool)->shutdown =
FALSE;
246 (*thrdpool)->queueopen =
TRUE;
250 (*thrdpool)->jobqueue->firstjob =
NULL;
251 (*thrdpool)->jobqueue->lastjob =
NULL;
252 (*thrdpool)->jobqueue->njobs = 0;
256 (*thrdpool)->currentjobs->firstjob =
NULL;
257 (*thrdpool)->currentjobs->lastjob =
NULL;
258 (*thrdpool)->currentjobs->njobs = 0;
262 (*thrdpool)->finishedjobs->firstjob =
NULL;
263 (*thrdpool)->finishedjobs->lastjob =
NULL;
264 (*thrdpool)->finishedjobs->njobs = 0;
276 (*thrdpool)->currworkingthreads = 0;
288 _threadnumber = nthreads;
432 if( !(*thrdpool)->queueopen || (*thrdpool)->shutdown )
440 (*thrdpool)->queueopen =
FALSE;
445 while( (*thrdpool)->jobqueue->njobs > 0 )
452 (*thrdpool)->shutdown =
TRUE;
465 for(
i = 0;
i < (*thrdpool)->nthreads;
i++ )
479 assert((*thrdpool)->currentjobs->njobs == 0);
481 assert((*thrdpool)->finishedjobs->njobs == 0);
553 SCIP_Bool blockwhenfull
583 (*job)->jobid = jobid;
584 (*job)->jobfunc = jobfunc;
586 (*job)->nextjob =
NULL;
#define SCIP_CALL_ABORT(x)
assert(minobj< SCIPgetCutoffbound(scip))
memory allocation routines
#define BMSfreeMemory(ptr)
#define BMSallocMemoryArray(ptr, num)
#define BMSfreeMemoryArray(ptr)
#define BMSallocMemory(ptr)
struct SCIP_Job * nextjob
SCIP_RETCODE(* jobfunc)(void *args)
SCIP_CONDITION jobfinished
SCIP_CONDITION queuenotempty
SCIP_JOBQUEUE * currentjobs
SCIP_CONDITION queueempty
SCIP_JOBQUEUE * finishedjobs
SCIP_CONDITION queuenotfull
the type definitions for the SCIP parallel interface
SCIP_RETCODE SCIPtpiInitCondition(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiWaitCondition(SCIP_CONDITION *condition, SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiSignalCondition(SCIP_CONDITION *condition)
SCIP_RETCODE SCIPtpiAcquireLock(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiInitLock(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiBroadcastCondition(SCIP_CONDITION *condition)
void SCIPtpiDestroyLock(SCIP_LOCK *lock)
void SCIPtpiDestroyCondition(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiReleaseLock(SCIP_LOCK *lock)
static SCIP_RETCODE freeJobQueue(void)
static SCIP_RETCODE threadPoolAddWork(SCIP_JOB *newjob, SCIP_SUBMITSTATUS *status)
static SCIP_JOBSTATUS checkJobQueue(SCIP_JOBQUEUE *jobqueue, int jobid)
SCIP_RETCODE SCIPtpiCreateJob(SCIP_JOB **job, int jobid, SCIP_RETCODE(*jobfunc)(void *args), void *jobarg)
static SCIP_RETCODE threadPoolThreadRetcode(void *threadnum)
static SCIP_RETCODE createThreadPool(SCIP_THREADPOOL **thrdpool, int nthreads, int qsize, SCIP_Bool blockwhenfull)
static void jobQueueAddJob(SCIP_THREADPOOL *threadpool, SCIP_JOB *newjob)
SCIP_RETCODE SCIPtpiExit(void)
static SCIP_Bool isJobRunning(SCIP_JOBQUEUE *currentjobs, int jobid)
SCIP_RETCODE SCIPtpiCollectJobs(int jobid)
SCIP_RETCODE SCIPtpiSumbitJob(SCIP_JOB *job, SCIP_SUBMITSTATUS *status)
int SCIPtpiGetNumThreads(void)
int SCIPtpiGetNewJobID(void)
static int threadPoolThread(void *threadnum)
static SCIP_RETCODE freeThreadPool(SCIP_THREADPOOL **thrdpool, SCIP_Bool finishjobs, SCIP_Bool completequeue)
SCIP_RETCODE SCIPtpiInit(int nthreads, int queuesize, SCIP_Bool blockwhenfull)
enum SCIP_Retcode SCIP_RETCODE
enum SCIP_Submitstatus SCIP_SUBMITSTATUS
enum SCIP_Jobstatus SCIP_JOBSTATUS
@ SCIP_SUBMIT_QUEUECLOSED