¾È³çÇϼ¼¿ä
¸µ¹öÆÛ(ȯÇüÅ¥)¸¦ ¸¸µé°í Àִµ¥ ÇöÀç »ç¿ëÁßÀÎ »çÀÌÁ ±¸ÇÏ´Â °æ¿ì
int CRingBuffer::GetUseSize(void)
{
if (_rear > _front)
{
return _rear - _front;
}
else if (_rear < _front)
{
return _rear + (_size - _front);
}
else
{
// °°À¸¸é
return 0;
}
}
ÀÌ·±½ÄÀ¸·Î front¿Í rear¸¦ Ȱ¿ëÇØ¼ ±¸Çϰí ÀÖ½À´Ï´Ù.
±×·±µ¥ ÀÌ°Ô ¸ÖƼ½º·¹µå ȯ°æÀÌ µÇ¸é, Àüü »çÀÌÁî°¡ 10, rear°¡ 4, front°¡ 6ÀÌ¿´À»¶§ µÎ¹øÂ° Á¶°ÇÀ» ÅÀ´Âµ¥ ±× »çÀÌ front°¡ ÇѹÙÄû µ¹¾Æ 1ÀÌ µÇ¹ö¸± °æ¿ì °á°ú°¡ 13ÀÌ µÇ¾î¹ö¸³´Ï´Ù.
ÀÎÅ¥¸¦ ÇÒ¶§ (Àüü»çÀÌÁî - »ç¿ëÁßÀλçÀÌÁî) ·Î ³ÖÀ» ¼ö ÀÖ´Â »çÀÌÁ °è»êÇØ¼ memcpy¸¦ ÇÏ°Ô µÇ´Âµ¥ À§ÀÇ °æ¿ì¿¡ ¸âÄ«ÇÇÇÒ »çÀÌÁî°¡ -3ÀÌ µË´Ï´Ù.
ÀÌ·± »óȲÀ϶§ µ¿±âÈ °´Ã¼°°Àº°É ¾È¾²°í ÇØ°áÇÒ ¹æ¹ýÀÌ ÀÖ³ª¿ä?
¹öÆÛ¿À¹öÇÃ·Î¿ì °Ë»öÇØ¼ ÀÌ·±°É ã±â´Â Çߴµ¥ ÀÌ°É·Î ÇØ°áÀÌ µÉÁö ±Ã±ÝÇÕ´Ï´Ù..
//int remaining = (rear - front) + (-((int)(rear <= front)) & bufferSize);
|
|
2017.12.19 17:57:44 |





| 7°³ÀÇ ´ñ±Û |
|
2°³ ÀÌ»óÀÇ ¾²·¹µå¿¡¼ ½á¾ß ÇÏ¸é ´ç¿¬È÷ µ¿±âȸ¦ ÇØ¾ßÁÒ..
ÇÑÁÙ¿¡ ¾´´Ù°í Çѹø¿¡ ½ÇÇàµÈ´Ù´Â º¸ÀåÀº ¾îµð¿¡µµ ¾øÀ¾´Ï´Ù |
|
|
2017/12/19 18:48
|
|
| 1// ÃÖ¼Ò´ÜÀ§ ¿ÀÆÛ·¹ÀÌ¼Ç ¸»¾¸À̽Ű¡¿ä? ±×·¯°íº¸´Ï Àú°Å ¸»°íµµ rear³ª front À̵¿½Ãų¶§ º¹»ç¸¦ Çѹø¿¡ ¸øÇϴ°æ¿ì(ÇѹÙÄû ³Ñ¾î°¡¼ µµ´Â °æ¿ì)¿¡ µÎ¹ø¿¡ ³ª´²¼°¡ ¾Æ´Ñ Çѹø¿¡ À̵¿ÇÏ¸é µ¿±âÈ ¹®Á¦°¡ ÇØ°áµÈ´Ù°í µé¾ú´Âµ¥ À̰͵µ ¹®Á¦°¡ ÀÖ³ª¿ä? | |
|
2017/12/19 18:57
|
|
|
> Çѹø¿¡ À̵¿ÇÏ¸é µ¿±âÈ ¹®Á¦°¡ ÇØ°áµÈ´Ù°í µé¾ú´Âµ¥
µ¿±âÈ ÀåÄ¡¸¦ ¾²Áö ¾ÊÀ¸¸é ±×°É 'ÇÑ ¹ø' À̶ó°í º¸Àå¹ÞÀ» ¼ö°¡ ¾øÀ¾´Ï´Ù. ½ÉÁö¾î a=b; ³ª a++; °°Àº 1°³ÀÇ ¿¬»êÀÚÁ¶Â÷µµ ÇѹøÀ̶ó°í º¸ÀåÇÒ ¼ö ¾øÀ¾´Ï´Ù. ±×³É º¸±â¿£ ÇÑÁÙÀÌÁö¸¸ ¾î¼Àºí¸®´Ü±îÁö ³»·Á°¡¸é ¿©·¯°³ÀÇ ¸í·É¾î·Î Âɰ³Áö±â ¶§¹®ÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ°Ç atomic operation À» °Ë»öÇØº¸¼¼¿ä |
|
|
2017/12/19 19:08
|
|
| atomic ½á¼ ´Ù µ¿±âÈ ½ÃÄѾßÁ® | |
|
2017/12/19 19:26
|
|
| µ¿±âÈ ¸»°ï ´äÀ̾ø½À´Ï´Ù ¶ô ÀâÀ¸¼¼¿© | |
|
2017/12/19 19:27
|
|
|
int a = 5 + 3
À̰оî¼À·¹º§(ÀÎÅÚ±âÁØ)·Î ³»·Á°¡¸é ÀÌ·¸°ÔµÊ MOV BX, 5 MOV CX, 3 ADD BX, CX OUT AX, [a] ´Ü¼øÇÑ add Çϳªµµ ¿©·¯°³ÀÇ ¿ÀÆÛ·¹À̼ÇÀ¸·Î ÀÌ·ç¾îÁ®ÀÖÀ¸´Ï µû¶ó¼ µ¿±âȾøÀÌ´Â ³ë´ä |
|
|
2017/12/19 19:30
|
|
| °Å±â¿¡ ÄÄÆÄÀÏ·¯ ÃÖÀûȱîÁö °¡¹ÌµÇ¸é ±×¾ß¸»·Î È¥µ·ÀÇÄ«¿À½º (¹Ìħ) | |
|
2017/12/19 19:52
|
|