They don't synthesize because it requires adding arbitration logic.
Asynchronous arbitration can be done by a request-acknowledge protocol.
Synchronous arbitration can be performed by choosing ONE clock event for synchronizing ALL assignments to a specific variable. This is equivalent to creating a new process, and moving all assignments (to a specific variable) into that new process. In addition to adding a clock event, you would need to add conditions that select which assignment to perform.