tests: msgq_usage: ensure all services started before client query

add semaphores to ensure all services started before client query.
otherwise client query services may fail.

Signed-off-by: Watson Zeng <zhiwei@synopsys.com>
diff --git a/tests/kernel/msgq/msgq_usage/src/main.c b/tests/kernel/msgq/msgq_usage/src/main.c
index 4ba093d..27a4f80 100644
--- a/tests/kernel/msgq/msgq_usage/src/main.c
+++ b/tests/kernel/msgq/msgq_usage/src/main.c
@@ -23,6 +23,7 @@
 K_THREAD_STACK_DEFINE(service2_stack, STACK_SIZE);
 K_THREAD_STACK_DEFINE(client_stack, STACK_SIZE);
 K_SEM_DEFINE(service_sema, 2, 2);
+K_SEM_DEFINE(service_started, 0, 2);
 K_SEM_DEFINE(test_continue, 0, 1);
 struct k_thread service_manager;
 struct k_thread service1;
@@ -60,9 +61,11 @@
 			break;
 		case REGISTER_SERVICE1:
 			services[0] = (struct k_msgq *)data[1];
+			k_sem_give(&service_started);
 			break;
 		case REGISTER_SERVICE2:
 			services[1] = (struct k_msgq *)data[1];
+			k_sem_give(&service_started);
 			break;
 		case SERVICE_QUIT:
 			for (int i = 0; i < NUM_SERVICES; i++) {
@@ -184,6 +187,10 @@
 	client_data[0] = QUERRY_SERVICE;
 	client_data[1] = (unsigned long)&client_msgq;
 
+	/* wait all services started */
+	k_sem_take(&service_started, K_FOREVER);
+	k_sem_take(&service_started, K_FOREVER);
+
 	/* query services */
 	k_msgq_put(&manager_q, client_data, K_NO_WAIT);
 	ret = k_msgq_get(&client_msgq, service_data, K_FOREVER);