changeset 913:49f519a0d079

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 28 Jan 2021 10:06:35 +0900
parents 1d58c2f250ab
children c6effc4245e4
files src/parallel_execution/ModelChecking/MCWorker.cbc
diffstat 1 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/ModelChecking/MCWorker.cbc	Thu Jan 28 00:04:05 2021 +0900
+++ b/src/parallel_execution/ModelChecking/MCWorker.cbc	Thu Jan 28 10:06:35 2021 +0900
@@ -57,11 +57,9 @@
     struct SingleLinkedQueue* mcQueue =  (struct SingleLinkedQueue*)worker->mcQueue->queue;
     struct Element* elem = mcQueue->top;
     elem = elem->next;
-    int length = lengthSingleLinkedQueue(mcQueue);
-    int idx = random()%(length+1); // incase of multithread use random_r
-    elem = getElementByIdx(mcQueue, idx);
     struct Context* ncontext = (struct Context*)elem->data;
     worker->mcContext = ncontext;
+    int length = lengthSingleLinkedQueue(mcQueue);
     for (int i = 0; i <= length; i++) {
         struct Element* tmpElem = getElementByIdx(mcQueue, i);
         struct Context* tmpContext = (struct Context*)tmpElem->data;
@@ -71,6 +69,18 @@
     goto meta(ncontext, ncontext->next);
 }
 
+__code startRandom(struct MCWorker* worker) {
+    struct SingleLinkedQueue* mcQueue =  (struct SingleLinkedQueue*)worker->mcQueue->queue;
+    struct Element* elem = mcQueue->top;
+    elem = elem->next;
+    int length = lengthSingleLinkedQueue(mcQueue);
+    int idx = random()%(length+1); // incase of multithread use random_r
+    elem = getElementByIdx(mcQueue, idx);
+    struct Context* ncontext = (struct Context*)elem->data;
+    worker->mcContext = ncontext;
+    goto meta(ncontext, ncontext->next);
+}
+
 extern TaskIterator* createQueueIterator(Element* elements, StateDB s, TaskIterator* prev);
 extern Element* takeNextIterator(TaskIterator* iterator);
 extern void freeIterator(TaskIterator* iterator);
@@ -118,7 +128,7 @@
     // printf("depth %d count %d\n", depth, count++);
     mcworker->count++;
     //goto list->phils->next(list->phils,list);
-    goto meta(context, next);
+    goto meta(context, context->next);
 }
 
 __code getTaskMCWorker(struct MCWorker* mcWorker, struct Context* task, struct Worker* worker) {