如何检查内存是否可用于读/写操作?

时间:2015-04-28 11:36:11

标签: c windows multithreading visual-studio-2010 malloc

我正在尝试在使用malloc()定义的内存中写入字符值,同时从中读取字符值。为此,我全局定义内存,然后启动一个线程。在线程中,我在内存中写入字符值,在main()中我正在从中读取值。这是我的代码: -

char *str = (char *) malloc(90000);
DWORD WINAPI Thread_no_1( LPVOID lpParam ) 
{
    int a=1;
    int c=0;
 LOOP:do
   {
        str[c] = 'a';
            c++;
            goto LOOP;
   }while( a < 2 );

    return 0;
}

int main()
{
int b=0;
char value;

int Data_Of_Thread_1 = 1;
HANDLE Handle_Of_Thread_1 = 0;
Handle_Of_Thread_1 = CreateThread( NULL, 0, Thread_no_1, &Data_Of_Thread_1, 0, NULL);  
if ( Handle_Of_Thread_1 == NULL)
ExitProcess(Data_Of_Thread_1);

    while(1);
    {
    value = str[b];
    printf("%c",value);;
    b++;
    }

    return 0;
}

现在,当我运行此代码时出现此错误: - enter image description here 好像我不能同时读写。所以,我的问题是,我如何检查内存是否可用于读取和写入值?

2 个答案:

答案 0 :(得分:3)

 LOOP:do
   {
        str[c] = 'a';
            c++;
            goto LOOP;
   }while( a < 2 );

这是一个无限循环,每次迭代都会调用goto LOOP;,而无法检查while(a < 2)

答案 1 :(得分:0)

没有“不能同时读写”这样的事情。不同的线程分开执行。即使在2个内核上,内存访问也由控制器处理,“同时”访问也没有问题。但正如Alter Mann所说,第二线程中没有退出循环。