Форум программистов, компьютерный форум CyberForum.ru

Потоки - C++

Восстановить пароль Регистрация
 
FuKingBrain
52 / 51 / 3
Регистрация: 29.11.2010
Сообщений: 132
20.02.2011, 09:07     Потоки #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
int b[2]={0,0}; 
int sum=0;
 
 
void enterCS3(int p)
{
    MemoryBarrier();
    b[p]=1;
    MemoryBarrier();
    while(b[1-p])
    {       
        MemoryBarrier();
        b[p]=0;
        Sleep(rand()%10);
        MemoryBarrier();
        b[p]=1;
    }
}
 
void leaveCS3(int p)
{
    MemoryBarrier();
    b[p]=0;
}
 
DWORD WINAPI Thread3(void*p)
{
    for(int i=0;i<10000000;i++)
    {
        enterCS3(1);
        MemoryBarrier();
        sum++;
        char buf[100];
        itoa(sum, buf, 10);     
        buf[0]='1';
        buf[1]='_';
        printf("%s\n",buf);     
        leaveCS3(1);
    }
    return 0;
}
 
DWORD WINAPI Thread3_4(void*p)
{
    for(int i=0;i<10000000;i++)
    {
        enterCS3(1);
        MemoryBarrier();
        sum++;
        char buf[100];
        itoa(sum, buf, 10);     
        buf[0]='2';
        buf[1]='_';
        printf("%s\n",buf);
        leaveCS3(1);
    }
    return 0;
}
 
int main()
{
    HANDLE h; // указатель на поток, семафор, мьютекс и пр.
    HANDLE h1;
    h=CreateThread(NULL,0,Thread3,NULL,0,0); 
    h1=CreateThread(NULL,0,Thread3_4,NULL,0,0); 
}
Вопрос к знатокам:
В каком случае вероятность появлении ошибки:
1. Если в процедуре enterCS3 стоит Sleep(rand()%10);
2. Если в процедуре enterCS3 стоит Sleep(10);

Моё мнение такого что при Sleep(10); потоки ни когда не пересекутся и будут работать параллельно. Если же будет написано Sleep(rand()%10); то вероятность пересечения есть. Прав ли я? И можно как-нибудь создать такой пример чтоб потоки пересеклись?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2011, 09:07     Потоки
Посмотрите здесь:

Потоки C++
Потоки с++ C++
потоки.. C++
потоки C++
потоки C++
Потоки C++
Потоки C++
Потоки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru