Your question is based on a false distinction. If the thread is doing synchronous I/O, then it is progressing in its work. Assuming it doesn't contain a bug of some kind, the thread would only block on synchronous I/O if that was the way for that thread to progress in the work it was doing. So whether or not the thread is blocked, it's progressing in the work it's doing. (And if the thread is buggy, it may not be progressing in the work it's doing whether or not it's blocked.)
You don't explain your outer problem -- why you think you need this information and what you plan to do with it. But likely there's a solution to whatever your actual issue is, and it likely has nothing to do with interrogating the status of another thread.
In principle, there should be no way a thread can care what another thread is doing because that would be a layering violation. From the point of view of a particular thread, anything not done by that thread is done by the process and there is no reason one thread should care exactly how the process chooses to get some other work done, whether by some particular other thread, a group of threads, another process, or whatever. Threads should care about the work they are doing and about the work done by other things, but not the details of how other things do other work.