免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3272 | 回复: 10
打印 上一主题 下一主题

[C++] 大量线程安全改造 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-10 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-09 11:47 |只看该作者 |倒序浏览
有windows vc6产品要进行单线程到多线程改造,有所有源码,程序是c++写的,动态库是C写的,而且是很老以前的代码,看日志92年开始的,怀疑当时C是否支持多线程,至少有几百个动态库里的函数需要改造,请问有没有什么方法简单点的来改造?

论坛徽章:
0
2 [报告]
发表于 2014-12-09 17:58 来自手机 |只看该作者
还有有改造的必要吗?

如果是Linux,建议改造为多进程。但是Windows。。。进程开销太大了。。。只有重新设计了。

还有个办法,动态库使用loadlibrary方式加载多遍,这样全局变量就不会互相影响了。。。但这也太low了。。。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2014-12-09 21:48 |只看该作者
xphh2008 发表于 2014-12-09 17:58
还有有改造的必要吗?

如果是Linux,建议改造为多进程。但是Windows。。。进程开销太大了。。。只有重新 ...


后面那句不对。
一个dll被一个进程加载N次还是只有一份

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
4 [报告]
发表于 2014-12-10 00:16 来自手机 |只看该作者
92年,貌似windowd95还没一统天下呢
你看的只是标准裤吧,92年开发差不多

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-10 06:20:00
5 [报告]
发表于 2014-12-10 10:10 |只看该作者

--  (c) xxxx Systems, 1991. All Rights Reserved.
--
--      File Name   :   globals.c
--
--      Directory   :   lrs_util\source
--
--      Author      :   gds
--
--      Date        :   1989
--
--      Description :   Global variables for all of xxxx!   
--
--      Function List
--                      hello
--
--
--      Modification History
--
--    Date  | Issue | Author| Modification
--  --------|-------|-------|-------------------------------------------
--  01.08.91| v1.20e| cfl   | set which_curve_flag to D for defaults
--  01.08.91| v1.20e| cfl   | set current_curves[] to D for defaults
--  12/8/91 | v1.21 | mrb   | added extra variable for holiday filter
--  1/12/91 | v1.31 | mrb   | perhaps the biggest shake-up globals has           
--          |       |       | ever had. Removed all global variables           
--          |       |       | which were only used inside the yc calcs           
--          |       |       | and changed any "struct curve" variables           
--          |       |       | to be of type "PV_CURVE". Got rid of the
--          |       |       | time_basis variable which was never used.         
--          |       |       | Got rid of the cash_max, fra_max, futures_max,         
--          |       |       | swap_max and blended_max variables, all of            
--          |       |       | which were never used. Get rid of         
--          |       |       | selected_curve and curve_presentation           
--          |       |       | variables, which should never be used.           
--  20.01.92| v1.30b| cfl   | added bond struct size (again!)
--  27/1/92 | v1.31 | mrb   | started work for multiple yield curves.           
--          |       |       | Put all the time/date variables into a            
--          |       |       | structure along with all other variables           
--          |       |       | which are required on a per currency basis.           
--          |       |       | All the PV_CURVE pointers have gone into           
--          |       |       | a different structure.           
--  28/1/92 | v1.31 | mrb   | removed all the yield curve stuff (to make it           
--          |       |       | static - accessed via functions)           
--  29/1/92 | v1.31 | B.D.C.| currencies array has moved home to currency.c
--          |       |       | and is now static
--  30/1/92 | v1.31 | mrb   | got rid of even more stuff - f_dates went into
--          |       |       | yc struct along with last_futures_date_loaded,
--          |       |       | Opt_Dates, Days_To and Calc_Days_To vanished.
--  31/1/92 | v1.31 | mrb   | Added new global - hs_id (help screen id), but
--          |       |       | in return got rid of mat_dates array
--  13/2/92 | v1.31 | mrb   | Got rid of glob_op_mode
--   3/3/92 | v1.31 | mrb   | Got rid of current_curves,
--          |       |       | return_from_yield_curve etc.
--  23.03.92| V1.31 | MWSS  | removed update_scratch_flag as it is now
--          |       |       | replaced by recalculate_qsp[instrument] in
--          |       |       | cs_defs[]
-- 02/04/92 | V1.31 | SAB   | Addition of new array for Back Office
--          |       |       | instructions used by Confirmations
--          |       |       | Changed array so referenced by index(which is
--          |       |       | stored not the string)
--          |       |       |
--          |       |       |

还有89年的。。。化石级代码,怎么改造??

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2014-12-10 10:18 |只看该作者
貌似是跟金融相关的软件

这种改造不具普遍性,细节的还可以在这里问问,大的层面上的东西还是靠自己,谁都没有你熟悉你的面临的情况

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-10 06:20:00
7 [报告]
发表于 2014-12-10 10:36 |只看该作者
有人说用tbb
www   threadingbuildingblocks   org
有人了解这个吗? 用了这个就不用管线程安全了吗?

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
8 [报告]
发表于 2014-12-10 14:51 |只看该作者
回复 7# thzjy


    这是intel的并行程序库,并不适用于你想要的情况,使用并行程序库实际上会要求你的程序设计方案跟着新的并行库设计方案走,虽然可以很多情况下的确可以规避线程安全问题。基本上不改代码,不改设计就不要想由单线程变成多线程程序了。

论坛徽章:
0
9 [报告]
发表于 2014-12-10 20:34 来自手机 |只看该作者
嗯,说错了,应该是同一个dll复制多份,一起加载,每个线程用一个dll就可以了。这是一个超级无赖的方法,但是可行的。

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
10 [报告]
发表于 2014-12-11 10:23 |只看该作者
回复 9# xphh2008


    如果使用了全局变量或静态变量那么是不可行的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP