Efficent way of synchronizing between data
I think you have two main choices, have the components throw events when they dirty the data. 

The plus here is that events are extremely multithreaded friendly.
the minus is the program might have to know about how to sync the dirty data.

The other option is to have an abstract class with two methods doWork() and sync(). 
First run a parallel call to all the components.dowork
The when all completed run down each components.sync()

This has the plus of the program not knowing about data sync but the component stores its own dirty list and is very customizable as a result..
This has the minus of the components knowing about data sync.