小编Tra*_*xel的帖子

预增量运算符是否是线程安全的?

我正在用java制作一个相互竞争的汽车程序.每辆车都是一个单独的线程.

当汽车完成比赛时,每个人都称这种方法.我已经在不同的计时器速度下测试了该方法,它似乎工作正常.但我确实意识到每个线程都在访问变量carsComplete,有时是在同一时间(至少在date命令给我的范围内).

所以我的问题是:这个方法是线程安全的吗?

 public static String completeRace()
 {
      Date accessDate = new Date();
      System.out.println("Cars Complete: " + carsComplete + " Accessed at " + accessDate.toString());
      switch(++carsComplete)
      {
           case 1: return "1st";
           case 2: return "2nd";
           case 3: return "3rd";
           default: return carsComplete + "th";    
      }
 }
Run Code Online (Sandbox Code Playgroud)

java multithreading pre-increment

19
推荐指数
4
解决办法
8535
查看次数

为什么打印无符号字符有时会起作用,有时不起作用?在C.

对于一个学校项目,我正在写一个河豚加密(只是加密,而不是解密).我已经完成了加密,我决定将解密用于娱乐(在Blowfish中很容易).

我使用无符号字符来表示字节(尽管我认为uint8_t会更便携).当我试图打印出解密的字节时,我遇到了这个问题.我正在加密纯文本消息.我已经能够打印出我加密的实际文本消息,但只能在非常具体的位置打印出来.相同的确切代码似乎无法在其他任何地方工作.这里是:

int n;
for(n = 0; n < numBlocks; n++) // Blocks are 32-bit unsigned ints (unsigned long)
{
     // uchar is just a typedef for unsigned char
     // message is an array of uchars
     message[n] = (uchar) ((blocks[n]>>24));
     message[n+1] = (uchar) ((blocks[n]>>16));
     message[n+2] = (uchar) ((blocks[n]>>8));
     message[n+3] = (uchar) ((blocks[n]));
     // Printing works here; exact message comes back
     printf("%c%c%c%c", message[n], message[n+1], message[n+2], message[n+3]); 
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用两行完全相同的代码时,它不起作用.

for(n = 0; n < numBlocks; n++)
{
     // Printing doesn't …
Run Code Online (Sandbox Code Playgroud)

c printf unsigned char unsigned-char

3
推荐指数
1
解决办法
409
查看次数