首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

问几个平时大家不注意的有关问题哈

2012-03-27 
问几个平时大家不注意的问题哈第一个是关于大小端的如果之前的芯片是大端的现在变成小段了有个函数static

问几个平时大家不注意的问题哈
第一个是关于大小端的

如果之前的芯片是大端的现在变成小段了

有个函数 
static void func( void *data )
{

U8 *read_data;

read_data = (U8*)data;
......................

}
但是调用的地方传什么样参数都有,比如说int ,long long,unsigned long,unsigned char等等,我该如何对应呢。
我的想法是按照最长的去对应
static void func( void *data )
{
#ifdef LITTLE_ENDIAN_SUPPORT
(long long*)data = (long long*)data & 0xFF00000000000000;
data >>= 56;
#else
#endif /* LITTLE_ENDIAN_SUPPORT */
write_data = (U8*)data;
......................

}
不知道这样处理可以么?但是有符号和无符号之前用不用考虑,我有点迷惑

2.是关于互斥锁的

 比如说我定义了 static pthread_mutex_tmutex[3]
然后分别初始化三个 mutex

pthread_mutex_lock(mutex[0]);

.....一些处理......

pthread_mutex_unlock(mutex[0]);

当mutex[0]锁住的时候,mutex[1]可以进入那些处理么?

3。是关于fork的,为什么总有一些设计模式是fork一个子进程,由子进程去处理,而父进程只是在哪里等待
子进程处理完毕退出,直接用父进程不可以么?为什么还要fork?






[解决办法]
3. 父进程是界面,子进程是 复杂计算,这个时候如果用ui执行计算 会让界面死掉,, 或者父进程是服务,针对一个一个的client链接,如果只处理某个连接,则 另外的client会饿,想象一下你打游戏连不上服务器的场景吧。。。

2. 互斥锁是不锁自己函数的,比如你用 进程ThreadA调用互斥,那么再次用ThreadA是可以进入互斥的,
与其对应的叫做自旋锁, 锁住了谁都不能进包括自己

1.data >>= 56; 这个可以吗??第一次碰到??
大端转小断非常容易,, 别考虑神马符号, 那是显示的问题, 主要是转换
这个时候一定要确认你要转换的位数,否则出错,

转换时最好用unsigned char* pByte;
比如大端int 转换为 小端int, 字节流 pByteBuf 存储大端数据, 还要给个参数int nSize
int nReturn;
pByte = (unsigned char*) &nReturn;
pByte[0] = pByteBuf[3];
pByte[1] = pByteBuf[2];
pByte[2] = pByteBuf[1];
pByte[3] = pByteBuf[0];

long ,double 同理,,
[解决办法]
关于大小端的问题,指针本身是不存在的,

C/C++ code
static void func( void *data ){#ifdef LITTLE_ENDIAN_SUPPORT(long long*)data = (long long*)data & 0xFF00000000000000; // 这样做就错了,这样改变了指针的值data >>= 56;#else#endif /* LITTLE_ENDIAN_SUPPORT */write_data = (U8*)data;......................}
[解决办法]
1 大小端的问题:
对于运行在不同平台的程序,都是需要处理的,可以自己写个函数,判断是大端还是小端,大端的,按大端来处理,小端的,按小端来处理。

2 锁的问题:
锁要锁的是资源,锁的目的,是解决独占资源的争用的问题,不管你定义几个锁,只要有这两个锁之间需要争用独占的资源,有一个锁占锁定了这种独占资源了,另一个锁就需要等待。

3 父子进程的问题,这个是Unix/linux的,这个要根据业务需要来做的。如果可以在父进程处理的,那当然不需要fork子进程了。但是有些东西,父进程处理一些任务,然后交由子进程处理另外的一些任务。这个东西就比较复杂了,建议楼主找相关的书籍看看。有些书,写的还是比较详细的的。

说的很简单,建议楼主找相关的书籍看看,有条件的话,可以自己做几个小程序,实际测试一下。

热点排行