用C叉锻炼

时间:2016-04-29 00:32:37

标签: c fork

我试图理解//Convert Base64 Representation of jpeg to let imageData = imageString.split(',')[1]; let dataType = imageString.split('.')[0].split(';')[0].split(':')[1]; let binaryImageData = atob(imageData); let data = new FormData(); let blob = new Blob([binaryImageData], { type: dataType }) data.append('file', blob); let deferred = $.ajax({ url: this._imageAPIBaseUrl, data: data, cache: false, contentType: false, processData: false, type: 'POST' }); let observable = new AsyncSubject(); //When the Deferred is complete, push an item through the Observable deferred.done(function () { //Get the arguments as an array let args = Array.prototype.slice.call(arguments); //Call the observable next with the same parameters observable.next.apply(observable, args); //Complete the Observable to indicate that there are no more items. observable.complete(); }); //If the Deferred errors, push an error through the Observable deferred.fail(function () { //Get the arguments as an array let args = Array.prototype.slice.call(arguments); //Call the observable error with the args array observable.error.apply(observable, args); observable.complete(); }); return observable; 方法在C中是如何工作的。这是我教科书中的一个示例问题:

fork()
     

以下哪项输出可能?

     

1)D0A0B0C

     

2)CDAB000

     

3)DA00CB0

     

4)D0AB0CD

     

5)AD00BC0

我在纸上勾勒出来,我认为正确的答案是:1,3,5。虽然我在int main(void) { pid_t process_id; int status; if (fork() == 0) { if (fork() == 0) { printf("A"); } else { process_id = wait(&status); printf("B"); } } else { if (fork() == 0) { printf("C"); exit(0); } printf("D"); } printf("0"); return (0); } 工作时遇到了一些困难。我的回答是对的吗?

1 个答案:

答案 0 :(得分:4)

我刚刚解决了,我认为1,3和5是正确的。

有4个进程,但由于等待,2有一个依赖关系。 这意味着可能的输出是(_意味着可以抢占):

_A_0_B_0_
_C_
_D_0_

2和4不起作用,因为A和B之间没有0。 在fork()!= 0的过程中调用wait,这意味着它是父类。 fork()的语义是父项被赋予子项的进程id作为返回值,子项的返回值为0。 如果按照上面的3个输出进行操作,应该很容易看到1,3和5可以工作。