Perhaps you can get around this using a signal. Select another unused signal, for example SIGUSR1, and set a signal handler for it using a member sa_sigaction struct sigactionand specifying a flag SA_SIGINFO. Block the signal in each stream, except for the stream of interest (stream B).
If you want to study stream B, send it a stream-directed signal with pthread_kill(). Then the signal handler lights up, and its third argument will be a pointer to the structure ucontext_t. An element of uc_mcontextthis structure is a machine-dependent structure mcontext_tthat will contain register values at the point at which the stream was interrupted.
Then you just need to create a safe way to pass these values to stream A.