tcc

分布式事务之解决方案(TCC)

安稳与你 提交于 2019-11-28 10:38:04
4. 分布式事务解决方案之TCC 4.1. 什么是TCC事务 TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作 :预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作既回滚操作。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Confirm/Cancel操作若执行失败,TM会进行重试。 分支事务失败的情况 : TCC分为三个阶段 : Try阶段是做业务检查(一致性)及资源预留(隔离),此阶段仅是一个初步操作,它和后续的Confirm一起才能真正构成一个完整的业务逻辑。 Confirm阶段是做确认提交,Try阶段所有分支事务执行成功后开始执行Confirm。通常情况下,采用TCC则认为Confirm阶段是不会出错的。即 :只要Try成功,Confirm一定成功。若Confirm阶段真的出错了,需引入重试机制或人工处理。 Cancel阶段是在业务执行错误需要回滚的状态下执行分支事务的业务取消,预留资源释放。通常情况下,采用TCC则认为Cancel阶段也是一定成功的。若Cancel阶段真的出错了

Tiny C Compiler's generated code emits extra (unnecessary?) NOPs and JMPs

假装没事ソ 提交于 2019-11-28 07:31:47
问题 Can someone explain why this code: #include <stdio.h> int main() { return 0; } when compiled with tcc using tcc code.c produces this asm: 00401000 |. 55 PUSH EBP 00401001 |. 89E5 MOV EBP,ESP 00401003 |. 81EC 00000000 SUB ESP,0 00401009 |. 90 NOP 0040100A |. B8 00000000 MOV EAX,0 0040100F |. E9 00000000 JMP fmt_vuln1.00401014 00401014 |. C9 LEAVE 00401015 |. C3 RETN I guess that 00401009 |. 90 NOP is maybe there for some memory alignment, but what about 0040100F |. E9 00000000 JMP fmt_vuln1

pow() cast to integer, unexpected result

戏子无情 提交于 2019-11-27 16:06:07
I have some problems using an integer cast for the pow() function in the C programming language. The compiler I'm using is the Tiny C Compiler (tcc version 0.9.24) for the Windows platform. When executing the following code, it outputs the unexpected result 100, 99 : #include <stdio.h> #include <math.h> int main(void) { printf("%d, ", (int) pow(10, 2)); printf("%d", (int) pow(10, 2)); return 0; } However, at this online compiler the output is as expected: 100, 100 . I don't know what is causing this behavior. Any thoughts? Programming error from me, compiler bug? You found a bug in tcc. Thanks

pow() cast to integer, unexpected result

情到浓时终转凉″ 提交于 2019-11-26 22:26:32
问题 I have some problems using an integer cast for the pow() function in the C programming language. The compiler I'm using is the Tiny C Compiler (tcc version 0.9.24) for the Windows platform. When executing the following code, it outputs the unexpected result 100, 99 : #include <stdio.h> #include <math.h> int main(void) { printf("%d, ", (int) pow(10, 2)); printf("%d", (int) pow(10, 2)); return 0; } However, at this online compiler the output is as expected: 100, 100 . I don't know what is

分布式事务之TCC事务模型

会有一股神秘感。 提交于 2019-11-25 20:18:38
正文 我们先套一个业务场景进去,如下图所示 那页面点了支付按钮,调用支付服务,那我们后台要实现下面三个步骤 [1] 订单服务-修改订单状态 [2] 账户服务-扣减金钱 [3] 库存服务-扣减库存 达到事务的效果,要么一起成功,要么一起失败!就要采取TCC分布式事务方案! 概念 TCC的全称是(Try-Confirm-Cancel)。如下图所示 ps:TCC又可以被称为两阶段补偿事务,第一阶段try只是预留资源,第二阶段要明确的告诉服务提供者,这个资源你到底要不要,对应第二阶段的confirm/cancel,用来清除第一阶段的影响,所以叫补偿型事务。 再打个比方,说TCC太高大上是吧,讲RM中的prepare、commit、rollback接口,总知道吧。可以类比的这么理解 那差别在哪呢? rollback、commit、prepare,站在开发者层面是感知不到的,数据库帮你做了资源的操作! 而try、confirm、cancel,站在开发者层面是能感知到的,这三个方法的业务逻辑,即对资源的操作,开发者是要自己去实现的! 好,下面套入我们的场景,怎么做呢。比如,你的订单服务中本来只有一个接口 //修改代码状态 orderClient.updateStatus(); 都要拆为三个接口,即 orderClient.tryUpateStatus(); orderClient