У меня есть переменная (A) с блокировкой доступа к записи. Я хочу скопировать эту переменную в другую переменную (B), но я не хочу копировать блокировку доступа к записи. Как я могу это сделать?
WICRect rcLock = { 0, 0, sc_bitmapWidth , sc_bitmapHeight };
IWICBitmapLock *pILock=NULL;
hr =pWICBitmap->Lock(&rcLock, WICBitmapLockWrite, &pILock); //this is where I create the lock
hr=pRT->CreateSharedBitmap(
IID_IWICBitmapLock,
static_cast<void *>(pILock),
&bp2,
&m_pBitmap1
);
//m_pBitmap1 is locked its a ID2D1Bitmap object
m_pBitmap2=m_pBitmap1; //i want m_pBitmap2 to be unlocked
Поскольку вы не можете гарантировать, что чтение всего хранилища произойдет без перерыва из какого-либо другого потока, вы должны приобрести блокировку записи, чтобы убедиться, что никто не пишет на ваше хранилище, пока вы пытаетесь прочитать его.
Если поток (1) начинает чтение, и поток (2) перескакивает и начинает записывать его в вероятность того, что какой поток (1) фактически извлекает, является промежуточным слоем перед предыдущим и вновь сохраненным представлением значения.
Конечно, средняя цель не нужна, и, вероятно, это даже не действительное значение; то есть. это плохо.