La prima soluzione l'ho già provata, ma considerando che devo già fare usleep(200) al thread B affinchè dia il tempo ad A di passargli almeno un elemento, alla fine non va..
Per la seconda soluzione invece, intendi dire che bisogna porre usare una condizione pthread_cond_wait e fermarlo fino a che, esempio un flag non viene attivato?