static long timeout_ns = 100000;       /* 100us default timeout */
 static futex_t futex_pi;
+static pthread_barrier_t barrier;
 
 void usage(char *prog)
 {
        if (ret != 0)
                error("futex_lock_pi failed\n", ret);
 
+       pthread_barrier_wait(&barrier);
+
        /* Blocks forever */
        ret = futex_wait(&lock, 0, NULL, 0);
        error("futex_wait failed\n", ret);
               basename(argv[0]));
        ksft_print_msg("\tArguments: timeout=%ldns\n", timeout_ns);
 
+       pthread_barrier_init(&barrier, NULL, 2);
        pthread_create(&thread, NULL, get_pi_lock, NULL);
 
        /* initialize relative timeout */
        res = futex_wait_requeue_pi(&f1, f1, &futex_pi, &to, 0);
        test_timeout(res, &ret, "futex_wait_requeue_pi monotonic", ETIMEDOUT);
 
+       /* Wait until the other thread calls futex_lock_pi() */
+       pthread_barrier_wait(&barrier);
+       pthread_barrier_destroy(&barrier);
        /*
         * FUTEX_LOCK_PI with CLOCK_REALTIME
         * Due to historical reasons, FUTEX_LOCK_PI supports only realtime