You should be able to read those 4 transaction registers at any point of time. I don't think data gets corrupted just because we are reading them. Did you encounter any situation where the data of these registers got corrupted?. Please let me know.
Suppose transaction count contains 0x00FFFF00. I read lower byte - it is 0x00. Before I read other bytes, a transaction occors, and count now contains 0x00FFFEFF. And the final value I read is 0x00FFFE00 - totally wrong.
Why do you want to read the transaction counter while there is a read/write operation is going on?
Are you somewhere in the firmware reading the values and doing any operations according to the values?
You can rather use FIFO Read/Write operation appropriately.
What are you exactly trying to implement with this logic?