由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 单机多线程抢票实际算法
相关主题
谁帮我测俩use casedereference a NULL pointer in C
看魏老师和好虫论战,总结一句话Java 问题,请教如何找出一个array里的duplicate segments?
原来zhaoce是个搅屎棍question on reserve()
那几个现在还嘲笑单机性能的,不可救药了new了指针,delete的时候出错了
魏公公把吹的牛逼给圆了吧,我就看到魏公公下面没有了。超牛的debug
双CPU,做到10M TPS没任何压力distinguish load and store instruction given a segmentation fault
我们来做点unit test吧,座位数从3000改为4Segmentation fault
关于在c++ member function里用signal( )A weird segmentation fault!
相关话题的讨论汇总
话题: cursegment话题: endsegment话题: int话题: route
进入Programming版参与讨论
1 (共1页)
T********i
发帖数: 2416
1
我现在就把这个实际的单机多线程抢票的算法贴出来。
goodbug号称NASDAQ处理股票交易的算法比这个简单,请TA实现以下给我们看看好不好?
/**************************************************************
///
/// param segmentTickets Tickets left in each segment of the entire
route.
/// param from The start index of the segment of the user requested
route.
/// param length The length of the user requested route.
///
/// return true if the route is successfully reserved; otherwise
false.
*/
bool reserveTicket(int *segmentTickets, int from, int length) {
int *curSegment = segmentTickets + from;
int *endSegment = curSegment + length;
while (curSegment < endSegment) {
int newCount = InterlockedDecrement(curSegment);
if (newCount < 0)
break;
curSegment++;
}
if (curSegment < endSegment) {
// Failed, return back reserved
endSegment = curSegment + 1;
curSegment = segmentTickets + from;
while (curSegment < endSegment) {
InterlockedIncrement(curSegment);
curSegment++;
}
return false;
} else
return true;
}
T********i
发帖数: 2416
2
其实这个实现不算是最优的,这个设计的每个路段的余票数量是一个int类型。才4个
byte。
其实最优的应该是一个cache line的大小,也就是64字节。保证了各个core不会锁定同
一个cache line。
可以定义:
struct TicketCount {
int count;
char dummy[60];
};
然后用这个TicketCount ×类型替换上面的int × segmentTickets。算法就最优化了
1 (共1页)
进入Programming版参与讨论
相关主题
A weird segmentation fault!魏公公把吹的牛逼给圆了吧,我就看到魏公公下面没有了。
static variable存在heap还是stack?双CPU,做到10M TPS没任何压力
请问大家一个图形的问题:我们来做点unit test吧,座位数从3000改为4
问个GSL的问题关于在c++ member function里用signal( )
谁帮我测俩use casedereference a NULL pointer in C
看魏老师和好虫论战,总结一句话Java 问题,请教如何找出一个array里的duplicate segments?
原来zhaoce是个搅屎棍question on reserve()
那几个现在还嘲笑单机性能的,不可救药了new了指针,delete的时候出错了
相关话题的讨论汇总
话题: cursegment话题: endsegment话题: int话题: route