无意中自各儿想了一道题目,问问作者的意图

无意中自己想了一道题目,问问作者的意图


void fun()
{
                 static int  id = GetCurrentThreadId();
                 if(id!=GetCurrentThreadId())
                 {
                              ASSERT(0);
                  }
   
}


说说我写这段代码的意图,蛮有意思的,可以作为面试题目
------解决思路----------------------
当该函数被第一次调用时,id就记住了调用线程的线程id,由于是静态变量,它的生存期自此次开始就不会消亡。如果以后还有其他线程使用这个函数的话,断言就失败了。
------解决思路----------------------
那么我也考考你,下面这个函数是做什么的?

int FUNCTION(int v)
{
  --v;
  v 
------解决思路----------------------
= v >> 1;
  v 
------解决思路----------------------
= v >> 2;
  v 
------解决思路----------------------
= v >> 4;
  v 
------解决思路----------------------
= v >> 8;
  v 
------解决思路----------------------
= v >> 16;
  ++v;

  return v;
}

------解决思路----------------------
c里面才能这样用,c++貌似不可以吧?
------解决思路----------------------
引用:
那么我也考考你,下面这个函数是做什么的?

int FUNCTION(int v)
{
  --v;
  v 
------解决思路----------------------
= v >> 1;
  v 
------解决思路----------------------
= v >> 2;
  v 
------解决思路----------------------
= v >> 4;
  v 
------解决思路----------------------
= v >> 8;
  v 
------解决思路----------------------
= v >> 16;
  ++v;

  return v;
}

完全看不懂啊
------解决思路----------------------
引用:
那么我也考考你,下面这个函数是做什么的?

int FUNCTION(int v)
{
  --v;
  v 
------解决思路----------------------
= v >> 1;
  v 
------解决思路----------------------
= v >> 2;
  v 
------解决思路----------------------
= v >> 4;
  v 
------解决思路----------------------
= v >> 8;
  v 
------解决思路----------------------
= v >> 16;
  ++v;

  return v;
}
这个是什么呀,哥哥
------解决思路----------------------
引用:
那么我也考考你,下面这个函数是做什么的?

int FUNCTION(int v)
{
  --v;
  v 
------解决思路----------------------
= v >> 1;
  v 
------解决思路----------------------
= v >> 2;
  v 
------解决思路----------------------
= v >> 4;
  v 
------解决思路----------------------
= v >> 8;
  v 
------解决思路----------------------
= v >> 16;
  ++v;

  return v;
}

最早是云风github上看到的,roundup 到  2^m
------解决思路----------------------
防止被其他线程调用。
------解决思路----------------------
这段代码的用处在什么地方呢?楼主可以举个例子吗?
------解决思路----------------------
引用:
Quote: 引用:

这段代码的用处在什么地方呢?楼主可以举个例子吗?


在多线程环境中,有些函数是被别的模块调用的,有时候我需要确定这个函数是否只有一个线程在调用
我这段代码就派上用场了,假设A线程已经调用了我这个函数,后面B线程又来调用我这个函数的话,那就断言了


检测函数是否为单线程调用
哦,明白了,但是这个仅仅是一个理论的分析而已,这段代码在实际的工程中有使用的例子吗?