Best method to stop a busy-waiting task?

Hi: If I have two tasks and one task (B) is doing a busy wait operation.  What is the best method to stop the busy-waiting task from another task (A)? I have presented two possibilities and if you know the pro and con of each please let me know.  Also if you have a better method, please also let me know. Dennis Method 1: Task B { while (1) {   xSemaphoreTake   if (g_stop_request == true)      break; xSemaphoreGive vTaskDelay(1); } } Task A { // At certain time   xSemaphoreTake   g_stop_request = true; xSemaphoreGive } Method 2: Task B { while (1) { if (xQueueReceive(qhandle, 0) == PD_True) break; vTaskDelay(1); } Task A { // At certain time xQueueSend(qhandle, 0); }

Best method to stop a busy-waiting task?

Is whatever it is busy waiting for capable of generating an interrupt?  If so then have the task block on a semaphore and the interrupt unblock the task using the same semaphore. If what it is busy waiting for is coming from another task then use a queue or semaphore to block again again, but this time have the other task send to the queue or semaphore to unblock the first task. Regards.