If you and someone else both send money to Wikileaks, you both sign your transactions. The transactions, even for identical amounts, are not identical. For one thing they will name different unspent txouts to spend; for another they'll have different timestamps. For a third thing they will specify different addresses for "change" to come back to. All of these things will be combined in a hash function to give your transaction a transaction ID which is unique.
I suggest you carefully read the first post of this thread. We aren't discussing the usual bitcoin transactions here but coinjoin specifics.
When Participant A and Participant B create the Transaction from the information from Controller C, they will only create and sign a transaction where Controller C indicates the correct output amount, address, and identifier. Participant A will only sign a transaction that has an output with identifier X and Participant B will only sign a transaction with identifier Y.
I guess one could include an indentifier in the tx_out using OP_DROP, that might work.